diff --git a/docs/index.html b/docs/index.html index 40b8d02c..0f586306 100644 --- a/docs/index.html +++ b/docs/index.html @@ -373,5 +373,5 @@
(fds.)model2D
(fd.)model2D
This function can be used to obtain a physical model in 2 dimension. Takes a force input signal for each point and outputs the state of each point. @@ -392,7 +392,7 @@
(fds.)stairsInterp1D
(fd.)stairsInterp1D
Stairs interpolator in 1 dimension. Takes a number of signals and outputs the same number of signals, where each one is multiplied by zero except the one specified by the argument. This can vary at run time (i.e. a slider), @@ -406,7 +406,7 @@
point
: number of the desired nonzero signal(fds.)stairsInterp2D
(fd.)stairsInterp2D
Stairs interpolator in 2 dimensions. Similar to the 1-D version.
si.bus(pointsX*pointsY) : stairsInterp2D(pointsX,pointsY,pointX,pointY) :
@@ -420,7 +420,7 @@ Usage
pointY
: vertical index of the desired nonzero signal
-(fds.)linInterp1D
+(fd.)linInterp1D
Linear interpolator in 1 dimension. Takes a number of signals and outputs
the same number of signals, where each one is multiplied by zero except two
signals around a floating point index. This is essentially a Faust
@@ -436,7 +436,7 @@
Usage
point
: floating point index
-(fds.)linInterp2D
+(fd.)linInterp2D
Linear interpolator in 2 dimensions. Similar to the 1 D version.
Usage
si.bus(pointsX*pointsY) : linInterp2D(pointsX,pointsY,pointX,pointY) :
@@ -450,7 +450,7 @@ Usage
pointY
: vertical float index
-(fds.)stairsInterp1DOut
+(fd.)stairsInterp1DOut
Stairs interpolator in 1 dimension. Similar to stairsInterp1D, except it
outputs only the desired signal.
Usage
@@ -462,7 +462,7 @@ Usage
point
: number of the desired nonzero signal
-(fds.)stairsInterp2DOut
+(fd.)stairsInterp2DOut
Stairs interpolator in 2 dimensions which outputs only one signal.
Usage
si.bus(pointsX*pointsY) : stairsInterp2DOut(pointsX,pointsY,pointX,pointY) : _
@@ -475,7 +475,7 @@ Usage
pointY
: vertical index of the desired nonzero signal
-(fds.)linInterp1DOut
+(fd.)linInterp1DOut
Linear interpolator in 1 dimension. Similar to stairsInterp1D, except it
sums each output signal and provides only one output value.
Usage
@@ -487,7 +487,7 @@ Usage
point
: floating point index
-(fds.)stairsInterp2DOut
+(fd.)stairsInterp2DOut
Linear interpolator in 2 dimensions which outputs only one signal.
Usage
si.bus(pointsX*pointsY) : linInterp2DOut(pointsX,pointsY,pointX,pointY) : _
@@ -508,7 +508,7 @@ Routing
scheme point: the force signal, the coefficient matrices and the neighbours’
signals. These functions are based on the Faust route primitive.
-(fds.)route1D
+(fd.)route1D
Routing function for 1 dimensional schemes.
Usage
si.bus((2*R+1)*(T+1)*points),si.bus(points*2) : route1D(points, R, T) :
@@ -521,7 +521,7 @@ Usage
T
: time coefficient
-(fds.)route2D
+(fd.)route2D
Routing function for 2 dimensional schemes.
Usage
si.bus((2*R+1)^2*(T+1)*pointsX*pointsY),si.bus(pointsX*pointsY*2) :
@@ -542,7 +542,7 @@ Scheme Operations
are used to stack in parallel several schemePoint blocks, according to the
choosed mesh size.
-(fds.)schemePoint
+(fd.)schemePoint
This function calculates the next state for each mesh point, in order to
form a scheme, several of these blocks need to be stacked in parallel.
This function takes in input, in order, the force, the coefficient matrices
@@ -557,7 +557,7 @@
Usage
D
: scheme spatial dimensions (i.e. 1 if 1-D, 2 if 2-D)
-(fds.)buildScheme1D
+(fd.)buildScheme1D
This function is used to stack in parallel several schemePoint functions in
1 dimension, according to the number of points.
Usage
@@ -571,7 +571,7 @@ Usage
T
: time coefficient
-(fds.)buildScheme2D
+(fd.)buildScheme2D
This function is used to stack in parallel several schemePoint functions in
2 dimensions, according to the number of points in the X and Y directions.
Usage
@@ -593,7 +593,7 @@ Interaction Models
The latters can be also used to drive the single force output signal to the
correct scheme points.
-(fds.)hammer
+(fd.)hammer
Implementation of a nonlinear collision model. The hammer is essentially a
finite difference scheme of a linear damped oscillator, which is coupled
with the mesh through the collision model (see Stefan Bilbao's book,
@@ -613,7 +613,7 @@
Usage
fIn
: hammer excitation signal (i.e. a button)
-(fds.)bow
+(fd.)bow
Implementation of a nonlinear friction based interaction model that induces
Helmholtz motion. (see Stefan Bilbao's book, Numerical Sound Synthesis).
Usage
diff --git a/docs/libs/index.html b/docs/libs/index.html
index c94540b9..ef490281 100644
--- a/docs/libs/index.html
+++ b/docs/libs/index.html
@@ -516,23 +516,23 @@ envelopes
(en.)asre
(en.)dx7envelope
fds
-(fds.)model1D
-(fds.)model2D
-(fds.)stairsInterp1D
-(fds.)stairsInterp2D
-(fds.)linInterp1D
-(fds.)linInterp2D
-(fds.)stairsInterp1DOut
-(fds.)stairsInterp2DOut
-(fds.)linInterp1DOut
-(fds.)stairsInterp2DOut
-(fds.)route1D
-(fds.)route2D
-(fds.)schemePoint
-(fds.)buildScheme1D
-(fds.)buildScheme2D
-(fds.)hammer
-(fds.)bow
+(fd.)model1D
+(fd.)model2D
+(fd.)stairsInterp1D
+(fd.)stairsInterp2D
+(fd.)linInterp1D
+(fd.)linInterp2D
+(fd.)stairsInterp1DOut
+(fd.)stairsInterp2DOut
+(fd.)linInterp1DOut
+(fd.)stairsInterp2DOut
+(fd.)route1D
+(fd.)route2D
+(fd.)schemePoint
+(fd.)buildScheme1D
+(fd.)buildScheme2D
+(fd.)hammer
+(fd.)bow
filters
(fi.)zero
(fi.)pole
diff --git a/docs/search/search_index.json b/docs/search/search_index.json
index 230a2beb..72dd6d60 100644
--- a/docs/search/search_index.json
+++ b/docs/search/search_index.json
@@ -1 +1 @@
-{"config":{"lang":["en"],"min_search_length":3,"prebuild_index":false,"separator":"[\\s\\-]+"},"docs":[{"location":"","text":"Faust Libraries The Faust libraries implement hundreds of DSP functions for audio processing and synthesis. They are organized by types in a set of .lib files (e.g., envelopes.lib , filters.lib , etc.). This website serves as the main documentation of the Faust libraries. The main Faust website can be found at the following URL: https://faust.grame.fr Using the Faust Libraries The easiest and most standard way to use the Faust libraries is to import stdfaust.lib in your Faust code: import(\"stdfaust.lib\"); This will give you access to all the Faust libraries through a series of environments: sf : all.lib an : analyzers.lib ba : basics.lib co : compressors.lib de : delays.lib dm : demos.lib dx : dx7.lib en : envelopes.lib fd : fds.lib fi : filters.lib ho : hoa.lib it : interpolators.lib ma : maths.lib mi : mi.lib ef : misceffects.lib os : oscillators.lib no : noises.lib pf : phaflangers.lib pm : physmodels.lib rm : reducemaps.lib re : reverbs.lib ro : routes.lib si : signals.lib so : soundfiles.lib sp : spats.lib sy : synths.lib ve : vaeffects.lib wa : webaudio.lib wd : wavedigitalfilters.lib vl : version.lib Environments can then be used as follows in your Faust code: import(\"stdfaust.lib\"); process = os.osc(440); In this case, we're calling the osc function from oscillators.lib . You can also access all the functions of all the libraries directly using the sf environment: import(\"stdfaust.lib\"); process = sf.osc(440); Alternatively, environments can be created by hand: os = library(\"oscillators.lib\"); process = os.osc(440); Finally, libraries can be simply imported in the Faust code (not recommended): import(\"oscillators.lib\"); process = osc(440); Organization of This Documentation The Overview tab in the upper menu provides additional information about the general organization of the libraries, licensing/copyright, and guidelines on how to contribute to the Faust libraries. The Libraries tab contain the actual documentation of the Faust libraries.","title":"Faust Libraries"},{"location":"#faust-libraries","text":"The Faust libraries implement hundreds of DSP functions for audio processing and synthesis. They are organized by types in a set of .lib files (e.g., envelopes.lib , filters.lib , etc.). This website serves as the main documentation of the Faust libraries. The main Faust website can be found at the following URL: https://faust.grame.fr","title":"Faust Libraries"},{"location":"#using-the-faust-libraries","text":"The easiest and most standard way to use the Faust libraries is to import stdfaust.lib in your Faust code: import(\"stdfaust.lib\"); This will give you access to all the Faust libraries through a series of environments: sf : all.lib an : analyzers.lib ba : basics.lib co : compressors.lib de : delays.lib dm : demos.lib dx : dx7.lib en : envelopes.lib fd : fds.lib fi : filters.lib ho : hoa.lib it : interpolators.lib ma : maths.lib mi : mi.lib ef : misceffects.lib os : oscillators.lib no : noises.lib pf : phaflangers.lib pm : physmodels.lib rm : reducemaps.lib re : reverbs.lib ro : routes.lib si : signals.lib so : soundfiles.lib sp : spats.lib sy : synths.lib ve : vaeffects.lib wa : webaudio.lib wd : wavedigitalfilters.lib vl : version.lib Environments can then be used as follows in your Faust code: import(\"stdfaust.lib\"); process = os.osc(440); In this case, we're calling the osc function from oscillators.lib . You can also access all the functions of all the libraries directly using the sf environment: import(\"stdfaust.lib\"); process = sf.osc(440); Alternatively, environments can be created by hand: os = library(\"oscillators.lib\"); process = os.osc(440); Finally, libraries can be simply imported in the Faust code (not recommended): import(\"oscillators.lib\"); process = osc(440);","title":"Using the Faust Libraries"},{"location":"#organization-of-this-documentation","text":"The Overview tab in the upper menu provides additional information about the general organization of the libraries, licensing/copyright, and guidelines on how to contribute to the Faust libraries. The Libraries tab contain the actual documentation of the Faust libraries.","title":"Organization of This Documentation"},{"location":"about/","text":"The Faust Project The Faust Project has started in 2002. It is actively developed by the Grame Research Lab . Many persons are contributing to the Faust project, by providing code for the compiler, architecture files, libraries, examples, documentation, scripts, bug reports, ideas, etc. We would like in particular to thank: Fons Adriaensen, Karim Barkati, J\u00e9r\u00f4me Barth\u00e9lemy, Tim Blechmann, Tiziano Bole, Alain Bonardi, Thomas Charbonnel, Raffaele Ciavarella, Julien Colafrancesco, Damien Cramet, Sarah Denoux, \u00c9tienne Gaudrin, Olivier Guillerminet, Pierre Guillot, Albert Gr\u00e4f, Pierre Jouvelot, Stefan Kersten, Victor Lazzarini, Matthieu Leberre, Mathieu Leroi, Fernando Lopez-Lezcano, Kjetil Matheussen, Hermann Meyer, R\u00e9my Muller, Raphael Panis, Eliott Paris, Reza Payami, Laurent Pottier, Sampo Savolainen, Nicolas Scaringella, Anne Sedes, Priyanka Shekar, Stephen Sinclair, Travis Skare, Julius Smith, Mike Solomon, Michael Wilson, Bart Brouns, Dirk Roosenburg, Riccardo Russo. as well as our colleagues at GRAME : Dominique Fober Christophe Lebreton St\u00e9phane Letz Romain Michon Yann Orlarey We would like also to thank for their financial support: the French Ministry of Culture , the Auvergne-Rh\u00f4ne-Alpes Region , the City of Lyon , the French National Research Agency (ANR) .","title":"About"},{"location":"about/#the-faust-project","text":"The Faust Project has started in 2002. It is actively developed by the Grame Research Lab . Many persons are contributing to the Faust project, by providing code for the compiler, architecture files, libraries, examples, documentation, scripts, bug reports, ideas, etc. We would like in particular to thank: Fons Adriaensen, Karim Barkati, J\u00e9r\u00f4me Barth\u00e9lemy, Tim Blechmann, Tiziano Bole, Alain Bonardi, Thomas Charbonnel, Raffaele Ciavarella, Julien Colafrancesco, Damien Cramet, Sarah Denoux, \u00c9tienne Gaudrin, Olivier Guillerminet, Pierre Guillot, Albert Gr\u00e4f, Pierre Jouvelot, Stefan Kersten, Victor Lazzarini, Matthieu Leberre, Mathieu Leroi, Fernando Lopez-Lezcano, Kjetil Matheussen, Hermann Meyer, R\u00e9my Muller, Raphael Panis, Eliott Paris, Reza Payami, Laurent Pottier, Sampo Savolainen, Nicolas Scaringella, Anne Sedes, Priyanka Shekar, Stephen Sinclair, Travis Skare, Julius Smith, Mike Solomon, Michael Wilson, Bart Brouns, Dirk Roosenburg, Riccardo Russo. as well as our colleagues at GRAME : Dominique Fober Christophe Lebreton St\u00e9phane Letz Romain Michon Yann Orlarey We would like also to thank for their financial support: the French Ministry of Culture , the Auvergne-Rh\u00f4ne-Alpes Region , the City of Lyon , the French National Research Agency (ANR) .","title":"The Faust Project"},{"location":"contributing/","text":"Contributing In general, libraries are organised in a stacked manner : the base ones define functions or constants without any dependancies, and additional ones are gradually built on top of simpler ones, layer by layer. Dependency loops must be avoided as much as possible . The resources folder contains tools to build and visualise the libraries dependencies graphs. If you wish to add a function to any of these libraries or if you plan to add a new library, make sure that you follow the following conventions: New Functions All functions must be preceded by a markdown documentation header respecting the following format (open the source code of any of the libraries for an example): //-----------------functionName-------------------- // Description // // #### Usage // // ``` // Usage Example // ``` // // Where: // // * argument1: argument 1 description //------------------------------------------------- Every time a new function is added, the documentation should be updated simply by running make doclib . The environment system (e.g. os.osc ) should be used when calling a function declared in another library (see the section on Using the Faust Libraries ). Try to reuse existing functions as much as possible. If you have any question, send an e-mail to rmichon_at_ccrma_dot_stanford_dot_edu. New Libraries Any new \"standard\" library should be declared in stdfaust.lib with its own environment (2 letters - see stdfaust.lib ). Any new \"standard\" library must be added to generateDoc . Functions must be organized by sections. Any new library should at least declare a name and a version . The comment based markdown documentation of each library must respect the following format (open the source code of any of the libraries for an example): //############### libraryName ################## // Description // // * Section Name 1 // * Section Name 2 // * ... // // It should be used using the `[...]` environment: // // ``` // [...] = library(\"libraryName\"); // process = [...].functionCall; // ``` // // Another option is to import `stdfaust.lib` which already contains the `[...]` // environment: // // ``` // import(\"stdfaust.lib\"); // process = [...].functionCall; // ``` //############################################## //================= Section Name =============== // Description //============================================== If you have any question, send an e-mail to rmichon_at_ccrma_dot_stanford_dot_edu. Coding Conventions In order to have a uniformized library system, we established the following conventions (that hopefully will be followed by others when making modifications to them :-) ). Documentation All the functions that we want to be \"public\" are documented. We used the faust2md \"standards\" for each library: //### for main title (library name - equivalent to # in markdown), //=== for section declarations (equivalent to ## in markdown) and //--- for function declarations (equivalent to #### in markdown - see basics.lib for an example). Sections in function documentation should be declared as #### markdown title. Each function documentation provides a \"Usage\" section (see basics.lib ). Library Import To prevent cross-references between libraries we generalized the use of the library(\"\") system for function calls in all the libraries. This means that everytime a function declared in another library is called, the environment corresponding to this library needs to be called too. To make things easier, a stdfaust.lib library was created and is imported by all the libraries: an = library(\"analyzers.lib\"); ba = library(\"basics.lib\"); co = library(\"compressors.lib\"); de = library(\"delays.lib\"); dm = library(\"demos.lib\"); dx = library(\"dx7.lib\"); en = library(\"envelopes.lib\"); fd = library(\"fds.lib\"); fi = library(\"filters.lib\"); ho = library(\"hoa.lib\"); it = library(\"interpolators.lib\"); ma = library(\"maths.lib\"); mi = library(\"mi.lib\"); ef = library(\"misceffects.lib\"); os = library(\"oscillators.lib\"); no = library(\"noises.lib\"); pf = library(\"phaflangers.lib\"); pm = library(\"physmodels.lib\"); rm = library(\"reducemaps.lib\"); re = library(\"reverbs.lib\"); ro = library(\"routes.lib\"); sp = library(\"spats.lib\"); si = library(\"signals.lib\"); so = library(\"soundfiles.lib\"); sy = library(\"synths.lib\"); ve = library(\"vaeffects.lib\"); wa = library(\"webaudio.lib\"); vl = library(\"version.lib\"); wd = library(\"wavedigitalfilters.lib\"); For example, if we wanted to use the smooth function which is now declared in signals.lib , we would do the following: import(\"stdfaust.lib\"); process = si.smooth(0.999); This standard is only used within the libraries: nothing prevents coders to still import signals.lib directly and call smooth without ro. , etc. It means symbols and function names defined within a library have to be unique to not collide with symbols of any other libraries. \"Demo\" Functions \"Demo\" functions are placed in demos.lib and have a built-in user interface (UI). Their name ends with the _demo suffix. Each of these function have a .dsp file associated to them in the /examples folder. Any function containing UI elements should be placed in this library and respect these standards. \"Standard\" Functions \"Standard\" functions are here to simplify the life of new (or not so new) Faust coders. They are declared in /libraries/doc/standardFunctions.md and allow to point programmers to preferred functions to carry out a specific task. For example, there are many different types of lowpass filters declared in filters.lib and only one of them is considered to be standard, etc.","title":" Contributing "},{"location":"contributing/#contributing","text":"In general, libraries are organised in a stacked manner : the base ones define functions or constants without any dependancies, and additional ones are gradually built on top of simpler ones, layer by layer. Dependency loops must be avoided as much as possible . The resources folder contains tools to build and visualise the libraries dependencies graphs. If you wish to add a function to any of these libraries or if you plan to add a new library, make sure that you follow the following conventions:","title":"Contributing"},{"location":"contributing/#new-functions","text":"All functions must be preceded by a markdown documentation header respecting the following format (open the source code of any of the libraries for an example): //-----------------functionName-------------------- // Description // // #### Usage // // ``` // Usage Example // ``` // // Where: // // * argument1: argument 1 description //------------------------------------------------- Every time a new function is added, the documentation should be updated simply by running make doclib . The environment system (e.g. os.osc ) should be used when calling a function declared in another library (see the section on Using the Faust Libraries ). Try to reuse existing functions as much as possible. If you have any question, send an e-mail to rmichon_at_ccrma_dot_stanford_dot_edu.","title":"New Functions"},{"location":"contributing/#new-libraries","text":"Any new \"standard\" library should be declared in stdfaust.lib with its own environment (2 letters - see stdfaust.lib ). Any new \"standard\" library must be added to generateDoc . Functions must be organized by sections. Any new library should at least declare a name and a version . The comment based markdown documentation of each library must respect the following format (open the source code of any of the libraries for an example): //############### libraryName ################## // Description // // * Section Name 1 // * Section Name 2 // * ... // // It should be used using the `[...]` environment: // // ``` // [...] = library(\"libraryName\"); // process = [...].functionCall; // ``` // // Another option is to import `stdfaust.lib` which already contains the `[...]` // environment: // // ``` // import(\"stdfaust.lib\"); // process = [...].functionCall; // ``` //############################################## //================= Section Name =============== // Description //============================================== If you have any question, send an e-mail to rmichon_at_ccrma_dot_stanford_dot_edu.","title":"New Libraries"},{"location":"contributing/#coding-conventions","text":"In order to have a uniformized library system, we established the following conventions (that hopefully will be followed by others when making modifications to them :-) ).","title":"Coding Conventions"},{"location":"contributing/#documentation","text":"All the functions that we want to be \"public\" are documented. We used the faust2md \"standards\" for each library: //### for main title (library name - equivalent to # in markdown), //=== for section declarations (equivalent to ## in markdown) and //--- for function declarations (equivalent to #### in markdown - see basics.lib for an example). Sections in function documentation should be declared as #### markdown title. Each function documentation provides a \"Usage\" section (see basics.lib ).","title":"Documentation"},{"location":"contributing/#library-import","text":"To prevent cross-references between libraries we generalized the use of the library(\"\") system for function calls in all the libraries. This means that everytime a function declared in another library is called, the environment corresponding to this library needs to be called too. To make things easier, a stdfaust.lib library was created and is imported by all the libraries: an = library(\"analyzers.lib\"); ba = library(\"basics.lib\"); co = library(\"compressors.lib\"); de = library(\"delays.lib\"); dm = library(\"demos.lib\"); dx = library(\"dx7.lib\"); en = library(\"envelopes.lib\"); fd = library(\"fds.lib\"); fi = library(\"filters.lib\"); ho = library(\"hoa.lib\"); it = library(\"interpolators.lib\"); ma = library(\"maths.lib\"); mi = library(\"mi.lib\"); ef = library(\"misceffects.lib\"); os = library(\"oscillators.lib\"); no = library(\"noises.lib\"); pf = library(\"phaflangers.lib\"); pm = library(\"physmodels.lib\"); rm = library(\"reducemaps.lib\"); re = library(\"reverbs.lib\"); ro = library(\"routes.lib\"); sp = library(\"spats.lib\"); si = library(\"signals.lib\"); so = library(\"soundfiles.lib\"); sy = library(\"synths.lib\"); ve = library(\"vaeffects.lib\"); wa = library(\"webaudio.lib\"); vl = library(\"version.lib\"); wd = library(\"wavedigitalfilters.lib\"); For example, if we wanted to use the smooth function which is now declared in signals.lib , we would do the following: import(\"stdfaust.lib\"); process = si.smooth(0.999); This standard is only used within the libraries: nothing prevents coders to still import signals.lib directly and call smooth without ro. , etc. It means symbols and function names defined within a library have to be unique to not collide with symbols of any other libraries.","title":"Library Import"},{"location":"contributing/#demo-functions","text":"\"Demo\" functions are placed in demos.lib and have a built-in user interface (UI). Their name ends with the _demo suffix. Each of these function have a .dsp file associated to them in the /examples folder. Any function containing UI elements should be placed in this library and respect these standards.","title":"\"Demo\" Functions"},{"location":"contributing/#standard-functions","text":"\"Standard\" functions are here to simplify the life of new (or not so new) Faust coders. They are declared in /libraries/doc/standardFunctions.md and allow to point programmers to preferred functions to carry out a specific task. For example, there are many different types of lowpass filters declared in filters.lib and only one of them is considered to be standard, etc.","title":"\"Standard\" Functions"},{"location":"copyright/","text":"Copyright / License Now that Faust libraries are less author specific, each function will normally have its own copyright-and-license line in the library source (the .lib file, such as analyzers.lib ). If not, see if the function is defined within a section of the .lib file stating the license in source-code comments. If not, then the copyright and license given at the beginning of the .lib file may be assumed, when present. If not, run git blame on the .lib file and ask the person who last edited the function! Note that it is presently possible for a library function released under one license to utilize another library function having some different license. There is presently no indication of this situation in the Faust compiler output, but such notice is planned. For now, library contributors should strive to use only library functions having compatible licenses, and concerned end-users must manually determine the union of licenses applicable to the library functions they are using. STK 4.3 License The Synthesis ToolKit in C++ (STK) is a set of open source audio signal processing and algorithmic synthesis classes written in the C++ programming language. STK was designed to facilitate rapid development of music synthesis and audio processing software, with an emphasis on cross-platform functionality, realtime control, ease of use, and educational example code. STK currently runs with realtime support (audio and MIDI) on Linux, Macintosh OS X, and Windows computer platforms. Generic, non-realtime support has been tested under NeXTStep, Sun, and other platforms and should work with any standard C++ compiler. STK WWW site: http://ccrma.stanford.edu/software/stk/ The Synthesis ToolKit in C++ (STK) Copyright (c) 1995--2017 Perry R. Cook and Gary P. Scavone Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. Any person wishing to distribute modifications to the Software is asked to send the modifications to the original developer so that they can be incorporated into the canonical version. For software copyrighted by Julius O. Smith III, email your modifications to jos@ccrma.stanford.edu . This is, however, not a binding provision of this license. THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. LGPL License This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.","title":" Copyright/License "},{"location":"copyright/#copyright-license","text":"Now that Faust libraries are less author specific, each function will normally have its own copyright-and-license line in the library source (the .lib file, such as analyzers.lib ). If not, see if the function is defined within a section of the .lib file stating the license in source-code comments. If not, then the copyright and license given at the beginning of the .lib file may be assumed, when present. If not, run git blame on the .lib file and ask the person who last edited the function! Note that it is presently possible for a library function released under one license to utilize another library function having some different license. There is presently no indication of this situation in the Faust compiler output, but such notice is planned. For now, library contributors should strive to use only library functions having compatible licenses, and concerned end-users must manually determine the union of licenses applicable to the library functions they are using.","title":"Copyright / License"},{"location":"copyright/#stk-43-license","text":"The Synthesis ToolKit in C++ (STK) is a set of open source audio signal processing and algorithmic synthesis classes written in the C++ programming language. STK was designed to facilitate rapid development of music synthesis and audio processing software, with an emphasis on cross-platform functionality, realtime control, ease of use, and educational example code. STK currently runs with realtime support (audio and MIDI) on Linux, Macintosh OS X, and Windows computer platforms. Generic, non-realtime support has been tested under NeXTStep, Sun, and other platforms and should work with any standard C++ compiler. STK WWW site: http://ccrma.stanford.edu/software/stk/ The Synthesis ToolKit in C++ (STK) Copyright (c) 1995--2017 Perry R. Cook and Gary P. Scavone Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. Any person wishing to distribute modifications to the Software is asked to send the modifications to the original developer so that they can be incorporated into the canonical version. For software copyrighted by Julius O. Smith III, email your modifications to jos@ccrma.stanford.edu . This is, however, not a binding provision of this license. THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.","title":"STK 4.3 License"},{"location":"copyright/#lgpl-license","text":"This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.","title":"LGPL License"},{"location":"organization/","text":"General Organization Only the libraries that are considered to be \"standard\" are documented: analyzers.lib basics.lib compressors.lib delays.lib demos.lib dx7.lib envelopes.lib fds.lib filters.lib hoa.lib interpolators.lib maths.lib mi.lib misceffects.lib oscillators.lib noises.lib phaflangers.lib physmodels.lib reducemaps.lib reverbs.lib routes.lib signals.lib soundfiles.lib spats.lib synths.lib tonestacks.lib (not documented but example in /examples/misc ) tubes.lib (not documented but example in /examples/misc ) vaeffects.lib wavedigitalfilters.lib webaudio.lib version.lib Other deprecated libraries such as music.lib , etc. are present but are not documented to not confuse new users. The documentation of each library can be found in /documentation/library.html or in /documentation/library.pdf . A global version number for the standard libraries is defined in version.lib . It follows the semantic versioning structure: MAJOR, MINOR, PATCH. The MAJOR number is increased when we make incompatible changes. The MINOR number is increased when we add functionality in a backwards compatible manner, and the PATCH number when we make backwards compatible bug fixes. By looking at the generated code or the diagram of process = vl.version; one can see the current version of the libraries. The /examples directory contains all the examples from the /examples folder of the Faust distribution as well as new ones. Most of them were updated to reflect the coding conventions described in the next section. Examples are organized by types in different folders. The /old folder contains examples that are fully deprecated, probably because they were integrated to the libraries and fully rewritten (see freeverb.dsp for example). Examples using deprecated libraries were integrated to the general tree but a warning comment was added at their beginning to point readers to the right library and function.","title":" Organization "},{"location":"organization/#general-organization","text":"Only the libraries that are considered to be \"standard\" are documented: analyzers.lib basics.lib compressors.lib delays.lib demos.lib dx7.lib envelopes.lib fds.lib filters.lib hoa.lib interpolators.lib maths.lib mi.lib misceffects.lib oscillators.lib noises.lib phaflangers.lib physmodels.lib reducemaps.lib reverbs.lib routes.lib signals.lib soundfiles.lib spats.lib synths.lib tonestacks.lib (not documented but example in /examples/misc ) tubes.lib (not documented but example in /examples/misc ) vaeffects.lib wavedigitalfilters.lib webaudio.lib version.lib Other deprecated libraries such as music.lib , etc. are present but are not documented to not confuse new users. The documentation of each library can be found in /documentation/library.html or in /documentation/library.pdf . A global version number for the standard libraries is defined in version.lib . It follows the semantic versioning structure: MAJOR, MINOR, PATCH. The MAJOR number is increased when we make incompatible changes. The MINOR number is increased when we add functionality in a backwards compatible manner, and the PATCH number when we make backwards compatible bug fixes. By looking at the generated code or the diagram of process = vl.version; one can see the current version of the libraries. The /examples directory contains all the examples from the /examples folder of the Faust distribution as well as new ones. Most of them were updated to reflect the coding conventions described in the next section. Examples are organized by types in different folders. The /old folder contains examples that are fully deprecated, probably because they were integrated to the libraries and fully rewritten (see freeverb.dsp for example). Examples using deprecated libraries were integrated to the general tree but a warning comment was added at their beginning to point readers to the right library and function.","title":"General Organization"},{"location":"standardFunctions/","text":"Standard Functions Dozens of functions are implemented in the Faust libraries and many of them are very specialized and not useful to beginners or to people who only need to use Faust for basic applications. This section offers an index organized by categories of the \"standard Faust functions\" (basic filters, effects, synthesizers, etc.). This index only contains functions without a user interface (UI). Faust functions with a built-in UI can be found in demos.lib . Analysis Tools Function Type Function Name Description Amplitude Follower an. amp_follower Classic analog audio envelope follower Octave Analyzers an. mth_octave_analyzer[N] Octave analyzers Basic Elements Function Type Function Name Description Beats ba. beat Pulses at a specific tempo Block si. block Terminate n signals Break Point Function ba. bpf Beak Point Function (BPF) Bus si. bus Bus of n signals Bypass (Mono) ba. bypass1 Mono bypass Bypass (Stereo) ba. bypass2 Stereo bypass Count Elements ba. count Count elements in a list Count Down ba. countdown Samples count down Count Up ba. countup Samples count up Delay (Integer) de. delay Integer delay Delay (Float) de. fdelay Fractional delay Down Sample ba. downSample Down sample a signal Impulsify ba. impulsify Turns a signal into an impulse Sample and Hold ba. sAndH Sample and hold Signal Crossing ro. cross Cross n signals Smoother (Default) si. smoo Exponential smoothing Smoother si. smooth Exponential smoothing with controllable pole Take Element ba. take Take en element from a list Time ba. time A simple timer Conversion Function Type Function Name Description dB to Linear ba. db2linear Converts dB to linear values Linear to dB ba. linear2db Converts linear values to dB MIDI Key to Hz ba. midikey2hz Converts a MIDI key number into a frequency Hz to MIDI Key ba. hz2midikey Converts a frequency into MIDI key number Pole to T60 ba. pole2tau Converts a pole into a time constant (t60) Samples to Seconds ba. samp2sec Converts samples to seconds Seconds to Samples ba. sec2samp Converts seconds to samples T60 to Pole ba. tau2pole Converts a time constant (t60) into a pole Effects Function Type Function Name Description Auto Wah ve. autowah Auto-Wah effect Compressor co. compressor_mono Dynamic range compressor Distortion ef. cubicnl Cubic nonlinearity distortion Crybaby ve. crybaby Crybaby wah pedal Echo ef. echo Simple echo Flanger pf. flanger_stereo Flanging effect Gate ef. gate_mono Mono signal gate Limiter co. limiter_1176_R4_mono Limiter Phaser pf. phaser2_stereo Phaser effect Reverb (FDN) re. fdnrev0 Feedback delay network reverberator Reverb (Freeverb) re. mono_freeverb Most \"famous\" Schroeder reverberator Reverb (Simple) re. jcrev Simple Schroeder reverberator Reverb (Zita) re. zita_rev1_stereo High quality FDN reverberator Panner sp. panner Linear stereo panner Pitch Shift ef. transpose Simple pitch shifter Panner sp. spat N outputs spatializer Speaker Simulator ef. speakerbp Simple speaker simulator Stereo Width ef. stereo_width Stereo width effect Vocoder ve. vocoder Simple vocoder Wah ve. wah4 Wah effect Envelope Generators Function Type Function Name Description ADSR en. adsr Attack/Decay/Sustain/Release envelope generator AR en. ar Attack/Release envelope generator ASR en. asr Attack/Sustain/Release envelope generator Exponential en. smoothEnvelope Exponential envelope generator Filters Function Type Function Name Description Bandpass (Butterworth) fi. bandpass Generic butterworth bandpass Bandpass (Resonant) fi. resonbp Virtual analog resonant bandpass Bandstop (Butterworth) fi. bandstop Generic butterworth bandstop Biquad fi. tf2 \"Standard\" biquad filter Comb (Allpass) fi. allpass_fcomb Schroeder allpass comb filter Comb (Feedback) fi. fb_fcomb Feedback comb filter Comb (Feedforward) fi. ff_fcomb Feed-forward comb filter. DC Blocker fi. dcblocker Default dc blocker Filterbank fi. filterbank Generic filter bank FIR (Arbitrary Order) fi. fir Nth-order FIR filter High Shelf fi. high_shelf High shelf Highpass (Butterworth) fi. highpass Nth-order Butterworth highpass Highpass (Resonant) fi. resonhp Virtual analog resonant highpass IIR (Arbitrary Order) fi. iir Nth-order IIR filter Level Filter fi. levelfilter Dynamic level lowpass Low Shelf fi. low_shelf Low shelf Lowpass (Butterworth) fi. lowpass Nth-order Butterworth lowpass Lowpass (Resonant) fi. resonlp Virtual analog resonant lowpass Notch Filter fi. notchw Simple notch filter Peak Equalizer fi. peak_eq Peaking equalizer section Oscillators/Sound Generators Function Type Function Name Description Impulse os. impulse Generate an impulse on start-up Impulse Train os. imptrain Band-limited impulse train Phasor os. phasor Simple phasor Pink Noise no. pink_noise Pink noise generator Pulse Train os. pulsetrain Band-limited pulse train Pulse Train (Low Frequency) os. lf_imptrain Low-frequency pulse train Sawtooth os. sawtooth Band-limited sawtooth wave Sawtooth (Low Frequency) os. lf_saw Low-frequency sawtooth wave Sine (Filter-Based) os. oscs Sine oscillator (filter-based) Sine (Table-Based) os. osc Sine oscillator (table-based) Square os. square Band-limited square wave Square (Low Frequency) os. lf_squarewave Low-frequency square wave Triangle os. triangle Band-limited triangle wave Triangle (Low Frequency) os. lf_triangle Low-frequency triangle wave White Noise no. noise White noise generator Synths Function Type Function Name Description Additive Drum sy. additiveDrum Additive synthesis drum Bandpassed Sawtooth sy. dubDub Sawtooth through resonant bandpass Comb String sy. combString String model based on a comb filter FM sy. fm Frequency modulation synthesizer Lowpassed Sawtooth sy. sawTrombone \"Trombone\" based on a filtered sawtooth Popping Filter sy. popFilterPerc Popping filter percussion instrument (function() { $('div.table-begin').nextUntil('div.table-end', 'table').addClass('table table-bordered'); })();","title":" Standard Functions "},{"location":"standardFunctions/#standard-functions","text":"Dozens of functions are implemented in the Faust libraries and many of them are very specialized and not useful to beginners or to people who only need to use Faust for basic applications. This section offers an index organized by categories of the \"standard Faust functions\" (basic filters, effects, synthesizers, etc.). This index only contains functions without a user interface (UI). Faust functions with a built-in UI can be found in demos.lib .","title":"Standard Functions"},{"location":"standardFunctions/#analysis-tools","text":"Function Type Function Name Description Amplitude Follower an. amp_follower Classic analog audio envelope follower Octave Analyzers an. mth_octave_analyzer[N] Octave analyzers","title":"Analysis Tools"},{"location":"standardFunctions/#basic-elements","text":"Function Type Function Name Description Beats ba. beat Pulses at a specific tempo Block si. block Terminate n signals Break Point Function ba. bpf Beak Point Function (BPF) Bus si. bus Bus of n signals Bypass (Mono) ba. bypass1 Mono bypass Bypass (Stereo) ba. bypass2 Stereo bypass Count Elements ba. count Count elements in a list Count Down ba. countdown Samples count down Count Up ba. countup Samples count up Delay (Integer) de. delay Integer delay Delay (Float) de. fdelay Fractional delay Down Sample ba. downSample Down sample a signal Impulsify ba. impulsify Turns a signal into an impulse Sample and Hold ba. sAndH Sample and hold Signal Crossing ro. cross Cross n signals Smoother (Default) si. smoo Exponential smoothing Smoother si. smooth Exponential smoothing with controllable pole Take Element ba. take Take en element from a list Time ba. time A simple timer","title":"Basic Elements"},{"location":"standardFunctions/#conversion","text":"Function Type Function Name Description dB to Linear ba. db2linear Converts dB to linear values Linear to dB ba. linear2db Converts linear values to dB MIDI Key to Hz ba. midikey2hz Converts a MIDI key number into a frequency Hz to MIDI Key ba. hz2midikey Converts a frequency into MIDI key number Pole to T60 ba. pole2tau Converts a pole into a time constant (t60) Samples to Seconds ba. samp2sec Converts samples to seconds Seconds to Samples ba. sec2samp Converts seconds to samples T60 to Pole ba. tau2pole Converts a time constant (t60) into a pole","title":"Conversion"},{"location":"standardFunctions/#effects","text":"Function Type Function Name Description Auto Wah ve. autowah Auto-Wah effect Compressor co. compressor_mono Dynamic range compressor Distortion ef. cubicnl Cubic nonlinearity distortion Crybaby ve. crybaby Crybaby wah pedal Echo ef. echo Simple echo Flanger pf. flanger_stereo Flanging effect Gate ef. gate_mono Mono signal gate Limiter co. limiter_1176_R4_mono Limiter Phaser pf. phaser2_stereo Phaser effect Reverb (FDN) re. fdnrev0 Feedback delay network reverberator Reverb (Freeverb) re. mono_freeverb Most \"famous\" Schroeder reverberator Reverb (Simple) re. jcrev Simple Schroeder reverberator Reverb (Zita) re. zita_rev1_stereo High quality FDN reverberator Panner sp. panner Linear stereo panner Pitch Shift ef. transpose Simple pitch shifter Panner sp. spat N outputs spatializer Speaker Simulator ef. speakerbp Simple speaker simulator Stereo Width ef. stereo_width Stereo width effect Vocoder ve. vocoder Simple vocoder Wah ve. wah4 Wah effect","title":"Effects"},{"location":"standardFunctions/#envelope-generators","text":"Function Type Function Name Description ADSR en. adsr Attack/Decay/Sustain/Release envelope generator AR en. ar Attack/Release envelope generator ASR en. asr Attack/Sustain/Release envelope generator Exponential en. smoothEnvelope Exponential envelope generator","title":"Envelope Generators"},{"location":"standardFunctions/#filters","text":"Function Type Function Name Description Bandpass (Butterworth) fi. bandpass Generic butterworth bandpass Bandpass (Resonant) fi. resonbp Virtual analog resonant bandpass Bandstop (Butterworth) fi. bandstop Generic butterworth bandstop Biquad fi. tf2 \"Standard\" biquad filter Comb (Allpass) fi. allpass_fcomb Schroeder allpass comb filter Comb (Feedback) fi. fb_fcomb Feedback comb filter Comb (Feedforward) fi. ff_fcomb Feed-forward comb filter. DC Blocker fi. dcblocker Default dc blocker Filterbank fi. filterbank Generic filter bank FIR (Arbitrary Order) fi. fir Nth-order FIR filter High Shelf fi. high_shelf High shelf Highpass (Butterworth) fi. highpass Nth-order Butterworth highpass Highpass (Resonant) fi. resonhp Virtual analog resonant highpass IIR (Arbitrary Order) fi. iir Nth-order IIR filter Level Filter fi. levelfilter Dynamic level lowpass Low Shelf fi. low_shelf Low shelf Lowpass (Butterworth) fi. lowpass Nth-order Butterworth lowpass Lowpass (Resonant) fi. resonlp Virtual analog resonant lowpass Notch Filter fi. notchw Simple notch filter Peak Equalizer fi. peak_eq Peaking equalizer section","title":"Filters"},{"location":"standardFunctions/#oscillatorssound-generators","text":"Function Type Function Name Description Impulse os. impulse Generate an impulse on start-up Impulse Train os. imptrain Band-limited impulse train Phasor os. phasor Simple phasor Pink Noise no. pink_noise Pink noise generator Pulse Train os. pulsetrain Band-limited pulse train Pulse Train (Low Frequency) os. lf_imptrain Low-frequency pulse train Sawtooth os. sawtooth Band-limited sawtooth wave Sawtooth (Low Frequency) os. lf_saw Low-frequency sawtooth wave Sine (Filter-Based) os. oscs Sine oscillator (filter-based) Sine (Table-Based) os. osc Sine oscillator (table-based) Square os. square Band-limited square wave Square (Low Frequency) os. lf_squarewave Low-frequency square wave Triangle os. triangle Band-limited triangle wave Triangle (Low Frequency) os. lf_triangle Low-frequency triangle wave White Noise no. noise White noise generator","title":"Oscillators/Sound Generators"},{"location":"standardFunctions/#synths","text":"Function Type Function Name Description Additive Drum sy. additiveDrum Additive synthesis drum Bandpassed Sawtooth sy. dubDub Sawtooth through resonant bandpass Comb String sy. combString String model based on a comb filter FM sy. fm Frequency modulation synthesizer Lowpassed Sawtooth sy. sawTrombone \"Trombone\" based on a filtered sawtooth Popping Filter sy. popFilterPerc Popping filter percussion instrument (function() { $('div.table-begin').nextUntil('div.table-end', 'table').addClass('table table-bordered'); })();","title":"Synths"},{"location":"libs/","text":"Faust Libraries Index analyzers (an.)abs_envelope_rect (an.)abs_envelope_tau (an.)abs_envelope_t60 (an.)abs_envelope_t19 (an.)amp_follower (an.)amp_follower_ud (an.)amp_follower_ar (an.)ms_envelope_rect (an.)ms_envelope_tau (an.)ms_envelope_t60 (an.)ms_envelope_t19 (an.)rms_envelope_rect (an.)rms_envelope_tau (an.)rms_envelope_t60 (an.)rms_envelope_t19 (an.)zcr (an.)mth_octave_analyzer (an.)mth_octave_spectral_level6e (an.)[third|half] octave [analyzer|filterbank] (an.)analyzer (an.)gortzelOpt (an.)gortzelComp (an.)goertzel (an.)fft (an.)ifft basics (ba.)samp2sec (ba.)sec2samp (ba.)db2linear (ba.)linear2db (ba.)lin2LogGain (ba.)log2LinGain (ba.)tau2pole (ba.)pole2tau (ba.)midikey2hz (ba.)hz2midikey (ba.)semi2ratio (ba.)ratio2semi (ba.)pianokey2hz (ba.)hz2pianokey (ba.)countdown (ba.)countup (ba.)sweep (ba.)time (ba.)ramp (ba.)tempo (ba.)period (ba.)pulse (ba.)pulsen (ba.)cycle (ba.)beat (ba.)pulse_countup (ba.)pulse_countdown (ba.)pulse_countup_loop (ba.)resetCtr (ba.)pulse_countdown_loop (ba.)count (ba.)take (ba.)subseq (ba.)if (ba.)selector (ba.)select2stereo (ba.)selectn (ba.)selectmulti (ba.)latch (ba.)sAndH (ba.)downSample (ba.)peakhold (ba.)peakholder (ba.)impulsify (ba.)automat (ba.)bpf (ba.)listInterp (ba.)bypass1 (ba.)bypass2 (ba.)bypass1to2 (ba.)bypass_fade (ba.)toggle (ba.)on_and_off (ba.)selectoutn (ba.)slidingReduce (ba.)slidingSum (ba.)slidingSump (ba.)slidingMax (ba.)slidingMin (ba.)slidingMean (ba.)slidingMeanp (ba.)slidingRMS (ba.)slidingRMSp (ba.)parallelOp (ba.)parallelMax (ba.)parallelMin (ba.)parallelMean (ba.)parallelRMS compressors (co.)peak_compression_gain_mono (co.)peak_compression_gain_N_chan (co.)FFcompressor_N_chan (co.)FBcompressor_N_chan (co.)FFFBcompressor_N_chan (co.)RMS_compression_gain_mono (co.)RMS_compression_gain_N_chan (co.)RMS_FFFBcompressor_N_chan (co.)RMS_FBcompressor_peak_limiter_N_chan (co.)compressor_lad_mono (co.)compressor_mono (co.)compressor_stereo (co.)compression_gain_mono (co.)limiter_1176_R4_mono (co.)limiter_1176_R4_stereo (co.)limiter_lad_N (co.)limiter_lad_mono (co.)limiter_lad_stereo (co.)limiter_lad_quad (co.)limiter_lad_bw delays (de.)delay (de.)fdelay (de.)sdelay (de.)fdelaylti and (de.)fdelayltv (de.)fdelay[n] (de.)fdelay[n]a demos (dm.)mth_octave_spectral_level_demo (dm.)parametric_eq_demo (dm.)spectral_tilt_demo (dm.)mth_octave_filterbank_demo and (dm.)filterbank_demo (dm.)cubicnl_demo (dm.)gate_demo (dm.)compressor_demo (dm.)moog_vcf_demo (dm.)wah4_demo (dm.)crybaby_demo (dm.)flanger_demo (dm.)phaser2_demo (dm.)freeverb_demo (dm.)stereo_reverb_tester (dm.)fdnrev0_demo (dm.)zita_rev_fdn_demo (dm.)zita_light (dm.)zita_rev1 (dm.)sawtooth_demo (dm.)virtual_analog_oscillator_demo (dm.)oscrs_demo (dm.)velvet_noise_demo (dm.)latch_demo (dm.)envelopes_demo (dm.)fft_spectral_level_demo (dm.)reverse_echo_demo(nChans) (dm.)pospass_demo (dm.)exciter (dm.)vocoder_demo dx7 (dx.)dx7_ampf (dx.)dx7_egraterisef (dx.)dx7_egraterisepercf (dx.)dx7_egratedecayf (dx.)dx7_egratedecaypercf (dx.)dx7_eglv2peakf (dx.)dx7_velsensf (dx.)dx7_fdbkscalef (dx.)dx7_op (dx.)dx7_algo (dx.)dx7_ui envelopes (en.)smoothEnvelope (en.)ar (en.)arfe (en.)are (en.)asr (en.)adsr (en.)adsre (en.)asre (en.)dx7envelope fds (fds.)model1D (fds.)model2D (fds.)stairsInterp1D (fds.)stairsInterp2D (fds.)linInterp1D (fds.)linInterp2D (fds.)stairsInterp1DOut (fds.)stairsInterp2DOut (fds.)linInterp1DOut (fds.)stairsInterp2DOut (fds.)route1D (fds.)route2D (fds.)schemePoint (fds.)buildScheme1D (fds.)buildScheme2D (fds.)hammer (fds.)bow filters (fi.)zero (fi.)pole (fi.)integrator (fi.)dcblockerat (fi.)dcblocker (fi.)lptN (fi.)ff_comb (fi.)ff_fcomb (fi.)ffcombfilter (fi.)fb_comb (fi.)fb_fcomb (fi.)rev1 (fi.)fbcombfilter and (fi.)ffbcombfilter (fi.)allpass_comb (fi.)allpass_fcomb (fi.)rev2 (fi.)allpass_fcomb5 and (fi.)allpass_fcomb1a (fi.)iir (fi.)fir (fi.)conv and (fi.)convN (fi.)tf1, (fi.)tf2 and (fi.)tf3 (fi.)notchw (fi.)tf21, (fi.)tf22, (fi.)tf22t and (fi.)tf21t (fi.)av2sv (fi.)bvav2nuv (fi.)iir_lat2 (fi.)allpassnt (fi.)iir_kl (fi.)allpassnklt (fi.)iir_lat1 (fi.)allpassn1mt (fi.)iir_nl (fi.)allpassnnlt (fi.)tf2np (fi.)wgr (fi.)nlf2 (fi.)apnl (fi.)allpassn (fi.)allpassnn (fi.)allpasskl (fi.)allpass1m (fi.)tf2s and (fi.)tf2snp (fi.)tf3slf (fi.)tf1s (fi.)tf2sb (fi.)tf1sb (fi.)resonlp (fi.)resonhp (fi.)resonbp (fi.)lowpass (fi.)highpass (fi.)lowpass0_highpass1 (fi.)lowpass_plus|minus_highpass (fi.)lowpass3e (fi.)lowpass6e (fi.)highpass3e (fi.)highpass6e (fi.)bandpass (fi.)bandstop (fi.)bandpass6e (fi.)bandpass12e (fi.)pospass (fi.)low_shelf (fi.)high_shelf (fi.)peak_eq (fi.)peak_eq_cq (fi.)peak_eq_rm (fi.)spectral_tilt (fi.)levelfilter (fi.)levelfilterN (fi.)mth_octave_filterbank[n] (fi.)filterbank (fi.)filterbanki (fi.)svf (fi.)avg_rect hoa (ho.)encoder (ho.)decoder (ho.)decoderStereo (ho.)optimBasic (ho.)optimMaxRe (ho.)optimInPhase (ho.)wider (ho.)map (ho.)rotate (ho.)encoder3D (ho.)optimBasic3D (ho.)optimMaxRe3D (ho.)optimInPhase3D interpolators (it.)interpolate_linear (it.)interpolate_cosine (it.)interpolate_cubic (it.)interpolator_two_points (it.)interpolator_linear (it.)interpolator_cosine (it.)interpolator_two_points (it.)interpolator_cubic (it.)interpolator_select maths (ma.)SR (ma.)BS (ma.)PI (ma.)E (ma.)EPSILON (ma.)MIN (ma.)INFINITY (ma.)FTZ (ma.)neg (ma.)sub(x,y) (ma.)inv (ma.)cbrt (ma.)hypot (ma.)ldexp (ma.)scalb (ma.)log1p (ma.)logb (ma.)ilogb (ma.)log2 (ma.)expm1 (ma.)acosh (ma.)asinh (ma.)atanh (ma.)sinh (ma.)cosh (ma.)tanh (ma.)erf (ma.)erfc (ma.)gamma (ma.)lgamma (ma.)J0 (ma.)J1 (ma.)Jn (ma.)Y0 (ma.)Y1 (ma.)Yn (ma.)fabs, (ma.)fmax, (ma.)fmin (ma.)np2 (ma.)frac (ma.)modulo (ma.)isnan (ma.)isinf (ma.)chebychev (ma.)chebychevpoly (ma.)diffn (ma.)signum (ma.)nextpow2 (ma.)zc mi (mi.)initState (mi.)mass (mi.)oscil (mi.)ground (mi.)posInput (mi.)spring (mi.)damper (mi.)springDamper (mi.)nlSpringDamper2 (mi.)nlSpringDamper3 (mi.)nlSpringDamperClipped (mi.)nlPluck (mi.)nlBow (mi.)collision (mi.)nlCollisionClipped misceffects (ef.)cubicnl (ef.)gate_mono (ef.)gate_stereo (ef.)speakerbp (ef.)piano_dispersion_filter (ef.)stereo_width (ef.)mesh_square (ef.)reverseEchoN(nChans,delay) (ef.)reverseDelayRamped(delay,phase) (ef.)uniformPanToStereo(nChans) (ef.)echo (ef.)transpose oscillators (os.)sinwaveform (os.)coswaveform (os.)phasor (os.)hs_phasor (os.)hsp_phasor (os.)oscsin (os.)hs_oscsin (os.)osccos (os.)oscp (os.)osci (os.)lf_imptrain (os.)lf_pulsetrainpos (os.)lf_pulsetrain (os.)lf_squarewavepos (os.)lf_squarewave (os.)lf_trianglepos (os.)lf_triangle (os.)lf_rawsaw (os.)lf_sawpos_phase (os.)lf_sawpos (os.)lf_sawpos_reset (os.)lf_sawpos_phase_reset (os.)lf_saw (os.)sawN (os.)sawNp (os.)saw2dpw (os.)saw3 (os.)sawtooth (os.)saw2f2 (os.)saw2f4 (os.)pulsetrainN (os.)pulsetrain (os.)squareN (os.)square (os.)impulse (os.)imptrainN (os.)imptrain (os.)triangleN (os.)triangle (os.)oscb (os.)oscrq (os.)oscrs (os.)oscrc (os.)oscs (os.)osc (os.)oscw (os.)oscws (os.)oscwq (os.)oscw (os.)CZsaw (os.)CZsawP (os.)CZsquare (os.)CZsquareP (os.)CZpulse (os.)CZpulseP (os.)CZsinePulse (os.)CZsinePulseP (os.)CZhalfSine (os.)CZhalfSineP (os.)CZresSaw (os.)CZresTriangle (os.)CZresTrap (os.)polyblep (os.)polyblep_saw (os.)polyblep_square (os.)polyblep_triangle (os.)quadosc noises (no.)noise (no.)multirandom (no.)multinoise (no.)noises (no.)pink_noise (no.)pink_noise_vm (no.)lfnoise, (no.)lfnoise0 and (no.)lfnoiseN (no.)sparse_noise_vm (no.)velvet_noise_vm (no.)gnoise phaflangers (pf.)flanger_mono (pf.)flanger_stereo (pf.)phaser2_mono (pf.)phaser2_stereo physmodels (pm.)speedOfSound (pm.)maxLength (pm.)f2l (pm.)l2f (pm.)l2s (pm.)basicBlock (pm.)chain (pm.)inLeftWave (pm.)inRightWave (pm.)in (pm.)outLeftWave (pm.)outRightWave (pm.)out (pm.)terminations (pm.)lTermination (pm.)rTermination (pm.)closeIns (pm.)closeOuts (pm.)endChain (pm.)waveguideN (pm.)waveguide (pm.)bridgeFilter (pm.)modeFilter (pm.)stringSegment (pm.)openString (pm.)nylonString (pm.)steelString (pm.)openStringPick (pm.)openStringPickUp (pm.)openStringPickDown (pm.)ksReflexionFilter (pm.)rStringRigidTermination (pm.)lStringRigidTermination (pm.)elecGuitarBridge (pm.)elecGuitarNuts (pm.)guitarBridge (pm.)guitarNuts (pm.)idealString (pm.)ks (pm.)ks_ui_MIDI (pm.)elecGuitarModel (pm.)elecGuitar (pm.)elecGuitar_ui_MIDI (pm.)guitarBody (pm.)guitarModel (pm.)guitar (pm.)guitar_ui_MIDI (pm.)nylonGuitarModel (pm.)nylonGuitar (pm.)nylonGuitar_ui_MIDI (pm.)modeInterpRes (pm.)modularInterpBody (pm.)modularInterpStringModel (pm.)modularInterpInstr (pm.)modularInterpInstr_ui_MIDI (pm.)bowTable (pm.)violinBowTable (pm.)bowInteraction (pm.)violinBow (pm.)violinBowedString (pm.)violinNuts (pm.)violinBridge (pm.)violinBody (pm.)violinModel (pm.)violin_ui (pm.)violin_ui_MIDI (pm.)openTube (pm.)reedTable (pm.)fluteJetTable (pm.)brassLipsTable (pm.)clarinetReed (pm.)clarinetMouthPiece (pm.)brassLips (pm.)fluteEmbouchure (pm.)wBell (pm.)fluteHead (pm.)fluteFoot (pm.)clarinetModel (pm.)clarinetModel_ui (pm.)clarinet_ui (pm.)clarinet_ui_MIDI (pm.)brassModel (pm.)brassModel_ui (pm.)brass_ui (pm.)brass_ui_MIDI (pm.)fluteModel (pm.)fluteModel_ui (pm.)flute_ui (pm.)flute_ui_MIDI (pm.)impulseExcitation (pm.)strikeModel (pm.)strike (pm.)pluckString (pm.)blower (pm.)blower_ui (pm.)djembeModel (pm.)djembe (pm.)djembe_ui_MIDI (pm.)marimbaBarModel (pm.)marimbaResTube (pm.)marimbaModel (pm.)marimba (pm.)marimba_ui_MIDI (pm.)churchBellModel (pm.)churchBell (pm.)churchBell_ui (pm.)englishBellModel (pm.)englishBell (pm.)englishBell_ui (pm.)frenchBellModel (pm.)frenchBell (pm.)frenchBell_ui (pm.)germanBellModel (pm.)germanBell (pm.)germanBell_ui (pm.)russianBellModel (pm.)russianBell (pm.)russianBell_ui (pm.)standardBellModel (pm.)standardBell (pm.)standardBell_ui (pm.)formantValues (pm.)voiceGender (pm.)skirtWidthMultiplier (pm.)autobendFreq (pm.)vocalEffort (pm.)fof (pm.)fofSH (pm.)fofCycle (pm.)fofSmooth (pm.)formantFilterFofCycle (pm.)formantFilterFofSmooth (pm.)formantFilterBP (pm.)formantFilterbank (pm.)formantFilterbankFofCycle (pm.)formantFilterbankFofSmooth (pm.)formantFilterbankBP (pm.)SFFormantModel (pm.)SFFormantModelFofCycle (pm.)SFFormantModelFofSmooth (pm.)SFFormantModelBP (pm.)SFFormantModelFofCycle_ui (pm.)SFFormantModelFofSmooth_ui (pm.)SFFormantModelBP_ui (pm.)SFFormantModelFofCycle_ui_MIDI (pm.)SFFormantModelFofSmooth_ui_MIDI (pm.)SFFormantModelBP_ui_MIDI (pm.)allpassNL quantizers (qu.)quantize (qu.)quantizeSmoothed (qu.)ionian (qu.)dorian (qu.)phrygian (qu.)lydian (qu.)mixo (qu.)eolian (qu.)locrian (qu.)pentanat (qu.)kumoi (qu.)natural (qu.)dodeca (qu.)dimin (qu.)penta reducemaps (rm.)reduce (rm.)reducemap reverbs (re.)jcrev (re.)satrev (re.)fdnrev0 (re.)zita_rev_fdn (re.)zita_rev1_stereo (re.)zita_rev1_ambi (re.)mono_freeverb (re.)stereo_freeverb routes (ro.)cross (ro.)crossnn (ro.)crossn1 (ro.)cross1n (ro.)crossNM (ro.)interleave (ro.)butterfly (ro.)hadamard (ro.)recursivize signals (si.)bus (si.)block (si.)interpolate (si.)smoo (si.)polySmooth (si.)smoothAndH (si.)bsmooth (si.)dot (si.)smooth (si.)cbus (si.)cmul (si.)cconj (si.)lag_ud (si.)rev soundfiles (so.)loop (so.)loop_speed (so.)loop_speed_level spats (sp.)panner (sp.)spat (sp.)stereoize synths (sy.)popFilterPerc (sy.)dubDub (sy.)sawTrombone (sy.)combString (sy.)additiveDrum (sy.)fm vaeffects (ve.)moog_vcf (ve.)moog_vcf_2b[n] (ve.)moogLadder (ve.)moogHalfLadder (ve.)diodeLadder (ve.)korg35LPF (ve.)korg35HPF (ve.)oberheim (ve.)oberheimBSF (ve.)oberheimBPF (ve.)oberheimHPF (ve.)oberheimLPF (ve.)sallenKeyOnePole (ve.)sallenKeyOnePoleLPF (ve.)sallenKeyOnePoleHPF (ve.)sallenKey2ndOrder (ve.)sallenKey2ndOrderLPF (ve.)sallenKey2ndOrderBPF (ve.)sallenKey2ndOrderHPF (ve.)wah4 (ve.)autowah (ve.)crybaby (ve.)vocoder version (vl.)version wdmodels (wd.)resistor (wd.)resistor_output (wd.)resistor_output_current (wd.)u_voltage (wd.)u_current (wd.)resVoltage (wd.)resVoltage_output (wd.)u_resVoltage (wd.)resCurrent (wd.)u_resCurrent (wd.)u_switch (wd.)capacitor (wd.)capacitor_output (wd.)inductor (wd.)inductor_output (wd.)u_idealDiode (wd.)u_chua (wd.)lambert (wd.)u_diodePair (wd.)u_diodeSingle (wd.)u_diodeAntiparallel (wd.)u_parallel_2 (wd.)parallel_2 (wd.)u_series_2 (wd.)series_2 (wd.)parallel_current (wd.)series_voltage (wd.)parallel (wd.)series (wd.)builddown (wd.)buildup (wd.)getres (wd.)parres (wd.)buildout (wd.)buildtree webaudio (wa.)lowpass2 (wa.)highpass2 (wa.)bandpass2 (wa.)notch2 (wa.)allpass2 (wa.)peaking2 (wa.)lowshelf2 (wa.)highshelf2","title":"Index"},{"location":"libs/#faust-libraries-index","text":"","title":"Faust Libraries Index"},{"location":"libs/#analyzers","text":"(an.)abs_envelope_rect (an.)abs_envelope_tau (an.)abs_envelope_t60 (an.)abs_envelope_t19 (an.)amp_follower (an.)amp_follower_ud (an.)amp_follower_ar (an.)ms_envelope_rect (an.)ms_envelope_tau (an.)ms_envelope_t60 (an.)ms_envelope_t19 (an.)rms_envelope_rect (an.)rms_envelope_tau (an.)rms_envelope_t60 (an.)rms_envelope_t19 (an.)zcr (an.)mth_octave_analyzer (an.)mth_octave_spectral_level6e (an.)[third|half] octave [analyzer|filterbank] (an.)analyzer (an.)gortzelOpt (an.)gortzelComp (an.)goertzel (an.)fft (an.)ifft","title":"analyzers"},{"location":"libs/#basics","text":"(ba.)samp2sec (ba.)sec2samp (ba.)db2linear (ba.)linear2db (ba.)lin2LogGain (ba.)log2LinGain (ba.)tau2pole (ba.)pole2tau (ba.)midikey2hz (ba.)hz2midikey (ba.)semi2ratio (ba.)ratio2semi (ba.)pianokey2hz (ba.)hz2pianokey (ba.)countdown (ba.)countup (ba.)sweep (ba.)time (ba.)ramp (ba.)tempo (ba.)period (ba.)pulse (ba.)pulsen (ba.)cycle (ba.)beat (ba.)pulse_countup (ba.)pulse_countdown (ba.)pulse_countup_loop (ba.)resetCtr (ba.)pulse_countdown_loop (ba.)count (ba.)take (ba.)subseq (ba.)if (ba.)selector (ba.)select2stereo (ba.)selectn (ba.)selectmulti (ba.)latch (ba.)sAndH (ba.)downSample (ba.)peakhold (ba.)peakholder (ba.)impulsify (ba.)automat (ba.)bpf (ba.)listInterp (ba.)bypass1 (ba.)bypass2 (ba.)bypass1to2 (ba.)bypass_fade (ba.)toggle (ba.)on_and_off (ba.)selectoutn (ba.)slidingReduce (ba.)slidingSum (ba.)slidingSump (ba.)slidingMax (ba.)slidingMin (ba.)slidingMean (ba.)slidingMeanp (ba.)slidingRMS (ba.)slidingRMSp (ba.)parallelOp (ba.)parallelMax (ba.)parallelMin (ba.)parallelMean (ba.)parallelRMS","title":"basics"},{"location":"libs/#compressors","text":"(co.)peak_compression_gain_mono (co.)peak_compression_gain_N_chan (co.)FFcompressor_N_chan (co.)FBcompressor_N_chan (co.)FFFBcompressor_N_chan (co.)RMS_compression_gain_mono (co.)RMS_compression_gain_N_chan (co.)RMS_FFFBcompressor_N_chan (co.)RMS_FBcompressor_peak_limiter_N_chan (co.)compressor_lad_mono (co.)compressor_mono (co.)compressor_stereo (co.)compression_gain_mono (co.)limiter_1176_R4_mono (co.)limiter_1176_R4_stereo (co.)limiter_lad_N (co.)limiter_lad_mono (co.)limiter_lad_stereo (co.)limiter_lad_quad (co.)limiter_lad_bw","title":"compressors"},{"location":"libs/#delays","text":"(de.)delay (de.)fdelay (de.)sdelay (de.)fdelaylti and (de.)fdelayltv (de.)fdelay[n] (de.)fdelay[n]a","title":"delays"},{"location":"libs/#demos","text":"(dm.)mth_octave_spectral_level_demo (dm.)parametric_eq_demo (dm.)spectral_tilt_demo (dm.)mth_octave_filterbank_demo and (dm.)filterbank_demo (dm.)cubicnl_demo (dm.)gate_demo (dm.)compressor_demo (dm.)moog_vcf_demo (dm.)wah4_demo (dm.)crybaby_demo (dm.)flanger_demo (dm.)phaser2_demo (dm.)freeverb_demo (dm.)stereo_reverb_tester (dm.)fdnrev0_demo (dm.)zita_rev_fdn_demo (dm.)zita_light (dm.)zita_rev1 (dm.)sawtooth_demo (dm.)virtual_analog_oscillator_demo (dm.)oscrs_demo (dm.)velvet_noise_demo (dm.)latch_demo (dm.)envelopes_demo (dm.)fft_spectral_level_demo (dm.)reverse_echo_demo(nChans) (dm.)pospass_demo (dm.)exciter (dm.)vocoder_demo","title":"demos"},{"location":"libs/#dx7","text":"(dx.)dx7_ampf (dx.)dx7_egraterisef (dx.)dx7_egraterisepercf (dx.)dx7_egratedecayf (dx.)dx7_egratedecaypercf (dx.)dx7_eglv2peakf (dx.)dx7_velsensf (dx.)dx7_fdbkscalef (dx.)dx7_op (dx.)dx7_algo (dx.)dx7_ui","title":"dx7"},{"location":"libs/#envelopes","text":"(en.)smoothEnvelope (en.)ar (en.)arfe (en.)are (en.)asr (en.)adsr (en.)adsre (en.)asre (en.)dx7envelope","title":"envelopes"},{"location":"libs/#fds","text":"(fds.)model1D (fds.)model2D (fds.)stairsInterp1D (fds.)stairsInterp2D (fds.)linInterp1D (fds.)linInterp2D (fds.)stairsInterp1DOut (fds.)stairsInterp2DOut (fds.)linInterp1DOut (fds.)stairsInterp2DOut (fds.)route1D (fds.)route2D (fds.)schemePoint (fds.)buildScheme1D (fds.)buildScheme2D (fds.)hammer (fds.)bow","title":"fds"},{"location":"libs/#filters","text":"(fi.)zero (fi.)pole (fi.)integrator (fi.)dcblockerat (fi.)dcblocker (fi.)lptN (fi.)ff_comb (fi.)ff_fcomb (fi.)ffcombfilter (fi.)fb_comb (fi.)fb_fcomb (fi.)rev1 (fi.)fbcombfilter and (fi.)ffbcombfilter (fi.)allpass_comb (fi.)allpass_fcomb (fi.)rev2 (fi.)allpass_fcomb5 and (fi.)allpass_fcomb1a (fi.)iir (fi.)fir (fi.)conv and (fi.)convN (fi.)tf1, (fi.)tf2 and (fi.)tf3 (fi.)notchw (fi.)tf21, (fi.)tf22, (fi.)tf22t and (fi.)tf21t (fi.)av2sv (fi.)bvav2nuv (fi.)iir_lat2 (fi.)allpassnt (fi.)iir_kl (fi.)allpassnklt (fi.)iir_lat1 (fi.)allpassn1mt (fi.)iir_nl (fi.)allpassnnlt (fi.)tf2np (fi.)wgr (fi.)nlf2 (fi.)apnl (fi.)allpassn (fi.)allpassnn (fi.)allpasskl (fi.)allpass1m (fi.)tf2s and (fi.)tf2snp (fi.)tf3slf (fi.)tf1s (fi.)tf2sb (fi.)tf1sb (fi.)resonlp (fi.)resonhp (fi.)resonbp (fi.)lowpass (fi.)highpass (fi.)lowpass0_highpass1 (fi.)lowpass_plus|minus_highpass (fi.)lowpass3e (fi.)lowpass6e (fi.)highpass3e (fi.)highpass6e (fi.)bandpass (fi.)bandstop (fi.)bandpass6e (fi.)bandpass12e (fi.)pospass (fi.)low_shelf (fi.)high_shelf (fi.)peak_eq (fi.)peak_eq_cq (fi.)peak_eq_rm (fi.)spectral_tilt (fi.)levelfilter (fi.)levelfilterN (fi.)mth_octave_filterbank[n] (fi.)filterbank (fi.)filterbanki (fi.)svf (fi.)avg_rect","title":"filters"},{"location":"libs/#hoa","text":"(ho.)encoder (ho.)decoder (ho.)decoderStereo (ho.)optimBasic (ho.)optimMaxRe (ho.)optimInPhase (ho.)wider (ho.)map (ho.)rotate (ho.)encoder3D (ho.)optimBasic3D (ho.)optimMaxRe3D (ho.)optimInPhase3D","title":"hoa"},{"location":"libs/#interpolators","text":"(it.)interpolate_linear (it.)interpolate_cosine (it.)interpolate_cubic (it.)interpolator_two_points (it.)interpolator_linear (it.)interpolator_cosine (it.)interpolator_two_points (it.)interpolator_cubic (it.)interpolator_select","title":"interpolators"},{"location":"libs/#maths","text":"(ma.)SR (ma.)BS (ma.)PI (ma.)E (ma.)EPSILON (ma.)MIN (ma.)INFINITY (ma.)FTZ (ma.)neg (ma.)sub(x,y) (ma.)inv (ma.)cbrt (ma.)hypot (ma.)ldexp (ma.)scalb (ma.)log1p (ma.)logb (ma.)ilogb (ma.)log2 (ma.)expm1 (ma.)acosh (ma.)asinh (ma.)atanh (ma.)sinh (ma.)cosh (ma.)tanh (ma.)erf (ma.)erfc (ma.)gamma (ma.)lgamma (ma.)J0 (ma.)J1 (ma.)Jn (ma.)Y0 (ma.)Y1 (ma.)Yn (ma.)fabs, (ma.)fmax, (ma.)fmin (ma.)np2 (ma.)frac (ma.)modulo (ma.)isnan (ma.)isinf (ma.)chebychev (ma.)chebychevpoly (ma.)diffn (ma.)signum (ma.)nextpow2 (ma.)zc","title":"maths"},{"location":"libs/#mi","text":"(mi.)initState (mi.)mass (mi.)oscil (mi.)ground (mi.)posInput (mi.)spring (mi.)damper (mi.)springDamper (mi.)nlSpringDamper2 (mi.)nlSpringDamper3 (mi.)nlSpringDamperClipped (mi.)nlPluck (mi.)nlBow (mi.)collision (mi.)nlCollisionClipped","title":"mi"},{"location":"libs/#misceffects","text":"(ef.)cubicnl (ef.)gate_mono (ef.)gate_stereo (ef.)speakerbp (ef.)piano_dispersion_filter (ef.)stereo_width (ef.)mesh_square (ef.)reverseEchoN(nChans,delay) (ef.)reverseDelayRamped(delay,phase) (ef.)uniformPanToStereo(nChans) (ef.)echo (ef.)transpose","title":"misceffects"},{"location":"libs/#oscillators","text":"(os.)sinwaveform (os.)coswaveform (os.)phasor (os.)hs_phasor (os.)hsp_phasor (os.)oscsin (os.)hs_oscsin (os.)osccos (os.)oscp (os.)osci (os.)lf_imptrain (os.)lf_pulsetrainpos (os.)lf_pulsetrain (os.)lf_squarewavepos (os.)lf_squarewave (os.)lf_trianglepos (os.)lf_triangle (os.)lf_rawsaw (os.)lf_sawpos_phase (os.)lf_sawpos (os.)lf_sawpos_reset (os.)lf_sawpos_phase_reset (os.)lf_saw (os.)sawN (os.)sawNp (os.)saw2dpw (os.)saw3 (os.)sawtooth (os.)saw2f2 (os.)saw2f4 (os.)pulsetrainN (os.)pulsetrain (os.)squareN (os.)square (os.)impulse (os.)imptrainN (os.)imptrain (os.)triangleN (os.)triangle (os.)oscb (os.)oscrq (os.)oscrs (os.)oscrc (os.)oscs (os.)osc (os.)oscw (os.)oscws (os.)oscwq (os.)oscw (os.)CZsaw (os.)CZsawP (os.)CZsquare (os.)CZsquareP (os.)CZpulse (os.)CZpulseP (os.)CZsinePulse (os.)CZsinePulseP (os.)CZhalfSine (os.)CZhalfSineP (os.)CZresSaw (os.)CZresTriangle (os.)CZresTrap (os.)polyblep (os.)polyblep_saw (os.)polyblep_square (os.)polyblep_triangle (os.)quadosc","title":"oscillators"},{"location":"libs/#noises","text":"(no.)noise (no.)multirandom (no.)multinoise (no.)noises (no.)pink_noise (no.)pink_noise_vm (no.)lfnoise, (no.)lfnoise0 and (no.)lfnoiseN (no.)sparse_noise_vm (no.)velvet_noise_vm (no.)gnoise","title":"noises"},{"location":"libs/#phaflangers","text":"(pf.)flanger_mono (pf.)flanger_stereo (pf.)phaser2_mono (pf.)phaser2_stereo","title":"phaflangers"},{"location":"libs/#physmodels","text":"(pm.)speedOfSound (pm.)maxLength (pm.)f2l (pm.)l2f (pm.)l2s (pm.)basicBlock (pm.)chain (pm.)inLeftWave (pm.)inRightWave (pm.)in (pm.)outLeftWave (pm.)outRightWave (pm.)out (pm.)terminations (pm.)lTermination (pm.)rTermination (pm.)closeIns (pm.)closeOuts (pm.)endChain (pm.)waveguideN (pm.)waveguide (pm.)bridgeFilter (pm.)modeFilter (pm.)stringSegment (pm.)openString (pm.)nylonString (pm.)steelString (pm.)openStringPick (pm.)openStringPickUp (pm.)openStringPickDown (pm.)ksReflexionFilter (pm.)rStringRigidTermination (pm.)lStringRigidTermination (pm.)elecGuitarBridge (pm.)elecGuitarNuts (pm.)guitarBridge (pm.)guitarNuts (pm.)idealString (pm.)ks (pm.)ks_ui_MIDI (pm.)elecGuitarModel (pm.)elecGuitar (pm.)elecGuitar_ui_MIDI (pm.)guitarBody (pm.)guitarModel (pm.)guitar (pm.)guitar_ui_MIDI (pm.)nylonGuitarModel (pm.)nylonGuitar (pm.)nylonGuitar_ui_MIDI (pm.)modeInterpRes (pm.)modularInterpBody (pm.)modularInterpStringModel (pm.)modularInterpInstr (pm.)modularInterpInstr_ui_MIDI (pm.)bowTable (pm.)violinBowTable (pm.)bowInteraction (pm.)violinBow (pm.)violinBowedString (pm.)violinNuts (pm.)violinBridge (pm.)violinBody (pm.)violinModel (pm.)violin_ui (pm.)violin_ui_MIDI (pm.)openTube (pm.)reedTable (pm.)fluteJetTable (pm.)brassLipsTable (pm.)clarinetReed (pm.)clarinetMouthPiece (pm.)brassLips (pm.)fluteEmbouchure (pm.)wBell (pm.)fluteHead (pm.)fluteFoot (pm.)clarinetModel (pm.)clarinetModel_ui (pm.)clarinet_ui (pm.)clarinet_ui_MIDI (pm.)brassModel (pm.)brassModel_ui (pm.)brass_ui (pm.)brass_ui_MIDI (pm.)fluteModel (pm.)fluteModel_ui (pm.)flute_ui (pm.)flute_ui_MIDI (pm.)impulseExcitation (pm.)strikeModel (pm.)strike (pm.)pluckString (pm.)blower (pm.)blower_ui (pm.)djembeModel (pm.)djembe (pm.)djembe_ui_MIDI (pm.)marimbaBarModel (pm.)marimbaResTube (pm.)marimbaModel (pm.)marimba (pm.)marimba_ui_MIDI (pm.)churchBellModel (pm.)churchBell (pm.)churchBell_ui (pm.)englishBellModel (pm.)englishBell (pm.)englishBell_ui (pm.)frenchBellModel (pm.)frenchBell (pm.)frenchBell_ui (pm.)germanBellModel (pm.)germanBell (pm.)germanBell_ui (pm.)russianBellModel (pm.)russianBell (pm.)russianBell_ui (pm.)standardBellModel (pm.)standardBell (pm.)standardBell_ui (pm.)formantValues (pm.)voiceGender (pm.)skirtWidthMultiplier (pm.)autobendFreq (pm.)vocalEffort (pm.)fof (pm.)fofSH (pm.)fofCycle (pm.)fofSmooth (pm.)formantFilterFofCycle (pm.)formantFilterFofSmooth (pm.)formantFilterBP (pm.)formantFilterbank (pm.)formantFilterbankFofCycle (pm.)formantFilterbankFofSmooth (pm.)formantFilterbankBP (pm.)SFFormantModel (pm.)SFFormantModelFofCycle (pm.)SFFormantModelFofSmooth (pm.)SFFormantModelBP (pm.)SFFormantModelFofCycle_ui (pm.)SFFormantModelFofSmooth_ui (pm.)SFFormantModelBP_ui (pm.)SFFormantModelFofCycle_ui_MIDI (pm.)SFFormantModelFofSmooth_ui_MIDI (pm.)SFFormantModelBP_ui_MIDI (pm.)allpassNL","title":"physmodels"},{"location":"libs/#quantizers","text":"(qu.)quantize (qu.)quantizeSmoothed (qu.)ionian (qu.)dorian (qu.)phrygian (qu.)lydian (qu.)mixo (qu.)eolian (qu.)locrian (qu.)pentanat (qu.)kumoi (qu.)natural (qu.)dodeca (qu.)dimin (qu.)penta","title":"quantizers"},{"location":"libs/#reducemaps","text":"(rm.)reduce (rm.)reducemap","title":"reducemaps"},{"location":"libs/#reverbs","text":"(re.)jcrev (re.)satrev (re.)fdnrev0 (re.)zita_rev_fdn (re.)zita_rev1_stereo (re.)zita_rev1_ambi (re.)mono_freeverb (re.)stereo_freeverb","title":"reverbs"},{"location":"libs/#routes","text":"(ro.)cross (ro.)crossnn (ro.)crossn1 (ro.)cross1n (ro.)crossNM (ro.)interleave (ro.)butterfly (ro.)hadamard (ro.)recursivize","title":"routes"},{"location":"libs/#signals","text":"(si.)bus (si.)block (si.)interpolate (si.)smoo (si.)polySmooth (si.)smoothAndH (si.)bsmooth (si.)dot (si.)smooth (si.)cbus (si.)cmul (si.)cconj (si.)lag_ud (si.)rev","title":"signals"},{"location":"libs/#soundfiles","text":"(so.)loop (so.)loop_speed (so.)loop_speed_level","title":"soundfiles"},{"location":"libs/#spats","text":"(sp.)panner (sp.)spat (sp.)stereoize","title":"spats"},{"location":"libs/#synths","text":"(sy.)popFilterPerc (sy.)dubDub (sy.)sawTrombone (sy.)combString (sy.)additiveDrum (sy.)fm","title":"synths"},{"location":"libs/#vaeffects","text":"(ve.)moog_vcf (ve.)moog_vcf_2b[n] (ve.)moogLadder (ve.)moogHalfLadder (ve.)diodeLadder (ve.)korg35LPF (ve.)korg35HPF (ve.)oberheim (ve.)oberheimBSF (ve.)oberheimBPF (ve.)oberheimHPF (ve.)oberheimLPF (ve.)sallenKeyOnePole (ve.)sallenKeyOnePoleLPF (ve.)sallenKeyOnePoleHPF (ve.)sallenKey2ndOrder (ve.)sallenKey2ndOrderLPF (ve.)sallenKey2ndOrderBPF (ve.)sallenKey2ndOrderHPF (ve.)wah4 (ve.)autowah (ve.)crybaby (ve.)vocoder","title":"vaeffects"},{"location":"libs/#version","text":"(vl.)version","title":"version"},{"location":"libs/#wdmodels","text":"(wd.)resistor (wd.)resistor_output (wd.)resistor_output_current (wd.)u_voltage (wd.)u_current (wd.)resVoltage (wd.)resVoltage_output (wd.)u_resVoltage (wd.)resCurrent (wd.)u_resCurrent (wd.)u_switch (wd.)capacitor (wd.)capacitor_output (wd.)inductor (wd.)inductor_output (wd.)u_idealDiode (wd.)u_chua (wd.)lambert (wd.)u_diodePair (wd.)u_diodeSingle (wd.)u_diodeAntiparallel (wd.)u_parallel_2 (wd.)parallel_2 (wd.)u_series_2 (wd.)series_2 (wd.)parallel_current (wd.)series_voltage (wd.)parallel (wd.)series (wd.)builddown (wd.)buildup (wd.)getres (wd.)parres (wd.)buildout (wd.)buildtree","title":"wdmodels"},{"location":"libs/#webaudio","text":"(wa.)lowpass2 (wa.)highpass2 (wa.)bandpass2 (wa.)notch2 (wa.)allpass2 (wa.)peaking2 (wa.)lowshelf2 (wa.)highshelf2","title":"webaudio"},{"location":"libs/analyzers/","text":"analyzers.lib Analyzers library. Its official prefix is an . Amplitude Tracking (an.)abs_envelope_rect Absolute value average with moving-average algorithm. Usage _ : abs_envelope_rect(period) : _; Where: period : sets the averaging frame in seconds (an.)abs_envelope_tau Absolute value average with one-pole lowpass and tau response. (See filters.lib.) Usage _ : abs_envelope_tau(period) : _; Where: period : (time to decay by 1/e) sets the averaging frame in secs (an.)abs_envelope_t60 Absolute value average with one-pole lowpass and t60 response. (See filters.lib.) Usage _ : abs_envelope_t60(period) : _; Where: period : (time to decay by 60 dB) sets the averaging frame in secs (an.)abs_envelope_t19 Absolute value average with one-pole lowpass and t19 response. (See filters.lib.) Usage _ : abs_envelope_t19(period) : _; Where: period : (time to decay by 1/e^2.2) sets the averaging frame in secs (an.)amp_follower Classic analog audio envelope follower with infinitely fast rise and exponential decay. The amplitude envelope instantaneously follows the absolute value going up, but then floats down exponentially. amp_follower is a standard Faust function. Usage _ : amp_follower(rel) : _ Where: rel : release time = amplitude-envelope time-constant (sec) going down Reference Musical Engineer's Handbook, Bernie Hutchins, Ithaca NY, 1975 Electronotes Newsletter, Bernie Hutchins (an.)amp_follower_ud Envelope follower with different up and down time-constants (also called a \"peak detector\"). Usage _ : amp_follower_ud(att,rel) : _ Where: att : attack time = amplitude-envelope time constant (sec) going up rel : release time = amplitude-envelope time constant (sec) going down Note We assume rel >> att. Otherwise, consider rel ~ max(rel,att). For audio, att is normally faster (smaller) than rel (e.g., 0.001 and 0.01). Use amp_follower_ar below to remove this restriction. Reference \"Digital Dynamic Range Compressor Design --- A Tutorial and Analysis\", by Dimitrios Giannoulis, Michael Massberg, and Joshua D. Reiss https://www.eecs.qmul.ac.uk/~josh/documents/2012/GiannoulisMassbergReiss-dynamicrangecompression-JAES2012.pdf (an.)amp_follower_ar Envelope follower with independent attack and release times. The release can be shorter than the attack (unlike in amp_follower_ud above). Usage _ : amp_follower_ar(att,rel) : _; Author Jonatan Liljedahl, revised by RM (an.)ms_envelope_rect Mean square with moving-average algorithm. Usage _ : ms_envelope_rect(period) : _; Where: period : sets the averaging frame in secs (an.)ms_envelope_tau Mean square average with one-pole lowpass and tau response. (See filters.lib.) Usage _ : ms_envelope_tau(period) : _; Where: period : (time to decay by 1/e) sets the averaging frame in secs (an.)ms_envelope_t60 Mean square with one-pole lowpass and t60 response. (See filters.lib.) Usage _ : ms_envelope_t60(period) : _; Where: period : (time to decay by 60 dB) sets the averaging frame in secs (an.)ms_envelope_t19 Mean square with one-pole lowpass and t19 response. (See filters.lib.) Usage _ : ms_envelope_t19(period) : _; Where: period : (time to decay by 1/e^2.2) sets the averaging frame in secs (an.)rms_envelope_rect Root mean square with moving-average algorithm. Usage _ : rms_envelope_rect(period) : _; Where: period : sets the averaging frame in secs (an.)rms_envelope_tau Root mean square with one-pole lowpass and tau response. (See filters.lib.) Usage _ : rms_envelope_tau(period) : _; Where: period : (time to decay by 1/e) sets the averaging frame in secs (an.)rms_envelope_t60 Root mean square with one-pole lowpass and t60 response. (See filters.lib.) Usage _ : rms_envelope_t60(period) : _; Where: period : (time to decay by 60 dB) sets the averaging frame in secs (an.)rms_envelope_t19 Root mean square with one-pole lowpass and t19 response. (See filters.lib.) Usage _ : rms_envelope_t19(period) : _; Where: period : (time to decay by 1/e^2.2) sets the averaging frame in secs (an.)zcr Zero-crossing rate (ZCR) with one-pole lowpass averaging based on the tau constant. It outputs an index between 0 and 1 at a desired analysis frame. The ZCR of a signal correlates with the noisiness [Gouyon et al. 2000] and the spectral centroid [Herrera-Boyer et al. 2006] of a signal. For sinusoidal signals, the ZCR can be multiplied by ma.SR/2 and used as a frequency detector. For example, it can be deployed as a computationally efficient adaptive mechanism for automatic Larsen suppression. Usage _ : zcr(tau) : _; Where: tau : (time to decay by e^-1) sets the averaging frame in seconds. Spectrum-Analyzers Spectrum-analyzers split the input signal into a bank of parallel signals, one for each spectral band. They are related to the Mth-Octave Filter-Banks in filters.lib . The documentation of this library contains more details about the implementation. The parameters are: M : number of band-slices per octave (>1) N : total number of bands (>2) ftop = upper bandlimit of the Mth-octave bands (> att. Otherwise, consider rel ~ max(rel,att). For audio, att is normally faster (smaller) than rel (e.g., 0.001 and 0.01). Use amp_follower_ar below to remove this restriction.","title":"Note"},{"location":"libs/analyzers/#reference_1","text":"\"Digital Dynamic Range Compressor Design --- A Tutorial and Analysis\", by Dimitrios Giannoulis, Michael Massberg, and Joshua D. Reiss https://www.eecs.qmul.ac.uk/~josh/documents/2012/GiannoulisMassbergReiss-dynamicrangecompression-JAES2012.pdf","title":"Reference"},{"location":"libs/analyzers/#anamp_follower_ar","text":"Envelope follower with independent attack and release times. The release can be shorter than the attack (unlike in amp_follower_ud above).","title":"(an.)amp_follower_ar"},{"location":"libs/analyzers/#usage_6","text":"_ : amp_follower_ar(att,rel) : _; Author Jonatan Liljedahl, revised by RM","title":"Usage"},{"location":"libs/analyzers/#anms_envelope_rect","text":"Mean square with moving-average algorithm.","title":"(an.)ms_envelope_rect"},{"location":"libs/analyzers/#usage_7","text":"_ : ms_envelope_rect(period) : _; Where: period : sets the averaging frame in secs","title":"Usage"},{"location":"libs/analyzers/#anms_envelope_tau","text":"Mean square average with one-pole lowpass and tau response. (See filters.lib.)","title":"(an.)ms_envelope_tau"},{"location":"libs/analyzers/#usage_8","text":"_ : ms_envelope_tau(period) : _; Where: period : (time to decay by 1/e) sets the averaging frame in secs","title":"Usage"},{"location":"libs/analyzers/#anms_envelope_t60","text":"Mean square with one-pole lowpass and t60 response. (See filters.lib.)","title":"(an.)ms_envelope_t60"},{"location":"libs/analyzers/#usage_9","text":"_ : ms_envelope_t60(period) : _; Where: period : (time to decay by 60 dB) sets the averaging frame in secs","title":"Usage"},{"location":"libs/analyzers/#anms_envelope_t19","text":"Mean square with one-pole lowpass and t19 response. (See filters.lib.)","title":"(an.)ms_envelope_t19"},{"location":"libs/analyzers/#usage_10","text":"_ : ms_envelope_t19(period) : _; Where: period : (time to decay by 1/e^2.2) sets the averaging frame in secs","title":"Usage"},{"location":"libs/analyzers/#anrms_envelope_rect","text":"Root mean square with moving-average algorithm.","title":"(an.)rms_envelope_rect"},{"location":"libs/analyzers/#usage_11","text":"_ : rms_envelope_rect(period) : _; Where: period : sets the averaging frame in secs","title":"Usage"},{"location":"libs/analyzers/#anrms_envelope_tau","text":"Root mean square with one-pole lowpass and tau response. (See filters.lib.)","title":"(an.)rms_envelope_tau"},{"location":"libs/analyzers/#usage_12","text":"_ : rms_envelope_tau(period) : _; Where: period : (time to decay by 1/e) sets the averaging frame in secs","title":"Usage"},{"location":"libs/analyzers/#anrms_envelope_t60","text":"Root mean square with one-pole lowpass and t60 response. (See filters.lib.)","title":"(an.)rms_envelope_t60"},{"location":"libs/analyzers/#usage_13","text":"_ : rms_envelope_t60(period) : _; Where: period : (time to decay by 60 dB) sets the averaging frame in secs","title":"Usage"},{"location":"libs/analyzers/#anrms_envelope_t19","text":"Root mean square with one-pole lowpass and t19 response. (See filters.lib.)","title":"(an.)rms_envelope_t19"},{"location":"libs/analyzers/#usage_14","text":"_ : rms_envelope_t19(period) : _; Where: period : (time to decay by 1/e^2.2) sets the averaging frame in secs","title":"Usage"},{"location":"libs/analyzers/#anzcr","text":"Zero-crossing rate (ZCR) with one-pole lowpass averaging based on the tau constant. It outputs an index between 0 and 1 at a desired analysis frame. The ZCR of a signal correlates with the noisiness [Gouyon et al. 2000] and the spectral centroid [Herrera-Boyer et al. 2006] of a signal. For sinusoidal signals, the ZCR can be multiplied by ma.SR/2 and used as a frequency detector. For example, it can be deployed as a computationally efficient adaptive mechanism for automatic Larsen suppression.","title":"(an.)zcr"},{"location":"libs/analyzers/#usage_15","text":"_ : zcr(tau) : _; Where: tau : (time to decay by e^-1) sets the averaging frame in seconds.","title":"Usage"},{"location":"libs/analyzers/#spectrum-analyzers","text":"Spectrum-analyzers split the input signal into a bank of parallel signals, one for each spectral band. They are related to the Mth-Octave Filter-Banks in filters.lib . The documentation of this library contains more details about the implementation. The parameters are: M : number of band-slices per octave (>1) N : total number of bands (>2) ftop = upper bandlimit of the Mth-octave bands ( 4 Where: l : list of elements (ba.)take Take an element from a list. take is a standard Faust function. Usage take(P,l) take(3,(10,20,30,40)) -> 30 Where: P : position (int, known at compile time, P > 0) l : list of elements (ba.)subseq Extract a part of a list. Usage subseq(l, p, n) subseq((10,20,30,40,50,60), 1, 3) -> (20,30,40) subseq((10,20,30,40,50,60), 4, 1) -> 50 Where: l : list p : start point (0: begin of list) n : number of elements Note: Faust doesn't have proper lists. Lists are simulated with parallel compositions and there is no empty list. Selectors (Conditions) (ba.)if if-then-else implemented with a select2. WARNING: since select2 is strict (always evaluating both branches), the resulting if does not have the usual \"lazy\" semantic of the C if form, and thus cannot be used to protect against forbidden computations like division-by-zero for instance. Usage if(cond, then, else) : _ Where: cond : condition then : signal selected while cond is true else : signal selected while cond is false (ba.)selector Selects the ith input among n at compile time. Usage selector(I,N) _,_,_,_ : selector(2,4) : _ // selects the 3rd input among 4 Where: I : input to select (int, numbered from 0, known at compile time) N : number of inputs (int, known at compile time, N > I) There is also cselector for selecting among complex input signals of the form (real,imag). (ba.)select2stereo Select between 2 stereo signals. Usage _,_,_,_ : select2stereo(bpc) : _,_ Where: bpc : the selector switch (0/1) (ba.)selectn Selects the ith input among N at run time. Usage selectn(N,i) _,_,_,_ : selectn(4,2) : _ // selects the 3rd input among 4 Where: N : number of inputs (int, known at compile time, N > 0) i : input to select (int, numbered from 0) Example test program N = 64; process = par(n, N, (par(i,N,i) : selectn(N,n))); (ba.)selectmulti Selects the ith circuit among N at run time (all should have the same number of inputs and outputs) with a crossfade. Usage selectmulti(n,lgen,id) Where: n : crossfade in samples lgen : list of circuits id : circuit to select (int, numbered from 0) Example test program process = selectmulti(ma.SR/10, ((3,9),(2,8),(5,7)), nentry(\"choice\", 0, 0, 2, 1)); process = selectmulti(ma.SR/10, ((_*3,_*9),(_*2,_*8),(_*5,_*7)), nentry(\"choice\", 0, 0, 2, 1)); Other (ba.)latch Latch input on positive-going transition of \"clock\" (\"sample-and-hold\"). Usage _ : latch(clocksig) : _ Where: clocksig : hold trigger (0 for hold, 1 for bypass) (ba.)sAndH Sample And Hold. sAndH is a standard Faust function. Usage _ : sAndH(t) : _ Where: t : hold trigger (0 for hold, 1 for bypass) (ba.)downSample Down sample a signal. WARNING: this function doesn't change the rate of a signal, it just holds samples... downSample is a standard Faust function. Usage _ : downSample(freq) : _ Where: freq : new rate in Hz (ba.)peakhold Outputs current max value above zero. Usage _ : peakhold(mode) : _; Where: mode means: 1 - Track and hold max value. (ba.)peakholder Tracks abs peak and holds peak for 'n' samples. Usage _ : peakholder(n) : _; Where: n : number of samples (ba.)impulsify Turns a signal into an impulse with the value of the current sample (0.3,0.2,0.1 becomes 0.3,0.0,0.0). This function is typically used with a button to turn its output into an impulse. impulsify is a standard Faust function. Usage button(\"gate\") : impulsify; (ba.)automat Record and replay to the values the input signal in a loop. Usage hslider(...) : automat(bps, size, init) : _ (ba.)bpf bpf is an environment (a group of related definitions) that can be used to create break-point functions. It contains three functions: start(x,y) to start a break-point function end(x,y) to end a break-point function point(x,y) to add intermediate points to a break-point function A minimal break-point function must contain at least a start and an end point: f = bpf.start(x0,y0) : bpf.end(x1,y1); A more involved break-point function can contains any number of intermediate points: f = bpf.start(x0,y0) : bpf.point(x1,y1) : bpf.point(x2,y2) : bpf.end(x3,y3); In any case the x_{i} must be in increasing order (for all i , x_{i} < x_{i+1} ). For example the following definition: f = bpf.start(x0,y0) : ... : bpf.point(xi,yi) : ... : bpf.end(xn,yn); implements a break-point function f such that: f(x) = y_{0} when x < x_{0} f(x) = y_{n} when x > x_{n} f(x) = y_{i} + (y_{i+1}-y_{i})*(x-x_{i})/(x_{i+1}-x_{i}) when x_{i} <= x and x < x_{i+1} bpf is a standard Faust function. (ba.)listInterp Linearly interpolates between the elements of a list. Usage index = 1.69; // range is 0-4 process = listInterp((800,400,350,450,325),index); Where: index : the index (float) to interpolate between the different values. The range of index depends on the size of the list. (ba.)bypass1 Takes a mono input signal, route it to e and bypass it if bpc = 1 . When bypassed, e is feed with zeros so that its state is cleanup up. bypass1 is a standard Faust function. Usage _ : bypass1(bpc,e) : _ Where: bpc : bypass switch (0/1) e : a mono effect (ba.)bypass2 Takes a stereo input signal, route it to e and bypass it if bpc = 1 . When bypassed, e is feed with zeros so that its state is cleanup up. bypass2 is a standard Faust function. Usage _,_ : bypass2(bpc,e) : _,_ Where: bpc : bypass switch (0/1) e : a stereo effect (ba.)bypass1to2 Bypass switch for effect e having mono input signal and stereo output. Effect e is bypassed if bpc = 1 .When bypassed, e is feed with zeros so that its state is cleanup up. bypass1to2 is a standard Faust function. Usage _ : bypass1to2(bpc,e) : _,_ Where: bpc : bypass switch (0/1) e : a mono-to-stereo effect (ba.)bypass_fade Bypass an arbitrary (N x N) circuit with 'n' samples crossfade. Inputs and outputs signals are faded out when 'e' is bypassed, so that 'e' state is cleanup up. Once bypassed the effect is replaced by par(i,N,_). Bypassed circuits can be chained. Usage _ : bypass_fade(n,b,e) : _ or _,_ : bypass_fade(n,b,e) : _,_ n : number of samples for the crossfade b : bypass switch (0/1) e : N x N circuit Examples process = bypass_fade(ma.SR/10, checkbox(\"bypass echo\"), echo); process = bypass_fade(ma.SR/10, checkbox(\"bypass reverb\"), freeverb); (ba.)toggle Triggered by the change of 0 to 1, it toggles the output value between 0 and 1. Usage _ : toggle : _ Examples button(\"toggle\") : toggle : vbargraph(\"output\", 0, 1) (an.amp_follower(0.1) > 0.01) : toggle : vbargraph(\"output\", 0, 1) // takes audio input (ba.)on_and_off The first channel set the output to 1, the second channel to 0. Usage _ , _ : on_and_off : _ Example button(\"on\"), button(\"off\") : on_and_off : vbargraph(\"output\", 0, 1) (ba.)selectoutn Route input to the output among N at run time. Usage _ : selectoutn(N, i) : _,_,...N Where: N : number of outputs (int, known at compile time, N > 0) i : output number to route to (int, numbered from 0) (i.e. slider) Example process = 1 : selectoutn(3, sel) : par(i, 3, vbargraph(\"v.bargraph %i\", 0, 1)); sel = hslider(\"volume\", 0, 0, 2, 1) : int; Sliding Reduce Provides various operations on the last N samples using a high order `slidingReduce(op,N,maxN,disabledVal,x)`` fold-like function: slidingSum(n) : the sliding sum of the last n input samples, CPU-light slidingSump(n,maxn) : the sliding sum of the last n input samples, numerically stable \"forever\" slidingMax(n,maxn) : the sliding max of the last n input samples slidingMin(n,maxn) : the sliding min of the last n input samples slidingMean(n) : the sliding mean of the last n input samples, CPU-light slidingMeanp(n,maxn) : the sliding mean of the last n input samples, numerically stable \"forever\" slidingRMS(n) : the sliding RMS of the last n input samples, CPU-light slidingRMSp(n,maxn) : the sliding RMS of the last n input samples, numerically stable \"forever\" Working Principle If we want the maximum of the last 8 values, we can do that as: simpleMax(x) = ( ( max(x@0,x@1), max(x@2,x@3) ) :max ), ( ( max(x@4,x@5), max(x@6,x@7) ) :max ) :max; max(x@2,x@3) is the same as max(x@0,x@1)@2 but the latter re-uses a value we already computed,so is more efficient. Using the same trick for values 4 trough 7, we can write: efficientMax(x)= ( ( max(x@0,x@1), max(x@0,x@1)@2 ) :max ), ( ( max(x@0,x@1), max(x@0,x@1)@2 ) :max@4 ) :max; We can rewrite it recursively, so it becomes possible to get the maximum at have any number of values, as long as it's a power of 2. recursiveMax = case { (1,x) => x; (N,x) => max(recursiveMax(N/2,x), recursiveMax(N/2,x)@(N/2)); }; What if we want to look at a number of values that's not a power of 2? For each value, we will have to decide whether to use it or not. If N is bigger than the index of the value, we use it, otherwise we replace it with ( 0-(ma.INFINITY) ): variableMax(N,x) = max( max( ( (x@0 : useVal(0)), (x@1 : useVal(1)) ):max, ( (x@2 : useVal(2)), (x@3 : useVal(3)) ):max ), max( ( (x@4 : useVal(4)), (x@5 : useVal(5)) ):max, ( (x@6 : useVal(6)), (x@7 : useVal(7)) ):max ) ) with { useVal(i) = select2((N>=i) , (0-(ma.INFINITY)),_); }; Now it becomes impossible to re-use any values. To fix that let's first look at how we'd implement it using recursiveMax, but with a fixed N that is not a power of 2. For example, this is how you'd do it with N=3 : binaryMaxThree(x) = ( recursiveMax(1,x)@0, // the first x recursiveMax(2,x)@1 // the second and third x ):max; N=6 binaryMaxSix(x) = ( recursiveMax(2,x)@0, // first two recursiveMax(4,x)@2 // third trough sixth ):max; Note that recursiveMax(2,x) is used at a different delay then in binaryMaxThree , since it represents 1 and 2, not 2 and 3. Each block is delayed the combined size of the previous blocks. N=7 binaryMaxSeven(x) = ( ( recursiveMax(1,x)@0, // first x recursiveMax(2,x)@1 // second and third ):max, ( recursiveMax(4,x)@3 // fourth trough seventh ) ):max; To make a variable version, we need to know which powers of two are used, and at which delay time. Then it becomes a matter of: lining up all the different block sizes in parallel: the first par() statement delaying each the appropriate amount: sumOfPrevBlockSizes() turning it on or off: useVal() getting the maximum of all of them: combine() In Faust, we can only do that for a fixed maximum number of values: maxN variableBinaryMaxN(N,maxN,x) = par(i,maxNrBits,recursiveMax(pow2(i),x)@sumOfPrevBlockSizes(N,maxN,i) : useVal(i)) : combine(maxNrBits) with { // The sum of all the sizes of the previous blocks sumOfPrevBlockSizes(N,maxN,0) = 0; sumOfPrevBlockSizes(N,maxN,i) = (subseq((allBlockSizes(N,maxN)),0,i):>_); allBlockSizes(N,maxN) = par(i, maxNrBits, pow2(i) * isUsed(i) ); maxNrBits = int2nrOfBits(maxN); // get the maximum of all blocks combine(2) = max; combine(N) = max(combine(N-1),_); // Decide wether or not to use a certain value, based on N useVal(i) = select2(isUsed(i), (0-(ma.INFINITY)),_); isUsed(i) = take(i+1, (int2bin(N,maxN))); }; (ba.)slidingReduce Fold-like high order function. Apply a commutative binary operation to the last consecutive samples of a signal . For example : slidingReduce(max,128,128,-(ma.INFINITY)) will compute the maximum of the last 128 samples. The output is updated each sample, unlike reduce, where the output is constant for the duration of a block. Usage _ : slidingReduce(op,N,maxN,disabledVal) : _ Where: N : the number of values to process maxN : the maximum number of values to process, needs to be a power of 2 op : the operator. Needs to be a commutative one. disabledVal : the value to use when we want to ignore a value. In other words, op(x,disabledVal) should equal to x . For example, +(x,0) equals x and min(x,ma.INFINITY) equals x . So if we want to calculate the sum, we need to give 0 as disabledVal , and if we want the minimum, we need to give ma.INFINITY as disabledVal . (ba.)slidingSum The sliding sum of the last n input samples. It will eventually run into numerical trouble when there is a persistent dc component. If that matters in your application, use the more CPU-intensive (ba.)slidingSump. Usage _ : slidingSum(N) : _ Where: N : the number of values to process (ba.)slidingSump The sliding sum of the last n input samples. It uses a lot more CPU then (ba.)slidingSum(n,maxn), but is numerically stable \"forever\" in return. Usage _ : slidingSump(N,maxN) : _ Where: N : the number of values to process maxN : the maximum number of values to process, needs to be a power of 2 (ba.)slidingMax The sliding maximum of the last n input samples. Usage _ : slidingMax(N,maxN) : _ Where: N : the number of values to process maxN : the maximum number of values to process, needs to be a power of 2 (ba.)slidingMin The sliding minimum of the last n input samples. Usage _ : slidingMin(N,maxN) : _ Where: N : the number of values to process maxN : the maximum number of values to process, needs to be a power of 2 (ba.)slidingMean The sliding mean of the last n input samples. It will eventually run into numerical trouble when there is a persistent dc component. If that matters in your application, use the more CPU-intensive (ba.)slidinRMSp. Usage _ : slidingMean(N,maxN) : _ Where: N : the number of values to process (ba.)slidingMeanp The sliding mean of the last n input samples. It uses a lot more CPU then (ba.)slidingMean(n,maxn), but is numerically stable \"forever\" in return. Usage _ : slidingMeanp(N,maxN) : _ Where: N : the number of values to process maxN : the maximum number of values to process, needs to be a power of 2 (ba.)slidingRMS The root mean square of the last n input samples. It will eventually run into numerical trouble when there is a persistent dc component. If that matters in your application, use the more CPU-intensive (ba.)slidinRMSp. Usage _ : slidingRMS(N) : _ Where: N : the number of values to process (ba.)slidingRMSp The root mean square of the last n input samples. It uses a lot more CPU then (ba.)slidingRMS(n,maxn), but is numerically stable \"forever\" in return. Usage _ : slidingRMSp(N,maxN) : _ Where: N : the number of values to process maxN : the maximum number of values to process, needs to be a power of 2 Parallel Operator Provides various operations on N parallel inputs using a high order parallelOp(op,N,x) function: parallelMax(n) : the max of n parallel inputs parallelMin(n) : the min of n parallel inputs parallelMean(n) : the mean of n parallel inputs parallelRMS(n) : the RMS of n parallel inputs (ba.)parallelOp Apply a commutative binary operation to N parallel inputs. usage si.bus(n) : parallelOp(op,n) : _ where: N : the number of parallel inputs known at compile time op : the operator which needs to be commutative (ba.)parallelMax The maximum of N parallel inputs. Usage si.bus(n) : parallelMax(n) : _ Where: N : the number of parallel inputs known at compile time (ba.)parallelMin The minimum of N parallel inputs. Usage si.bus(n) : parallelMin(n) : _ Where: N : the number of parallel inputs known at compile time (ba.)parallelMean The mean of N parallel inputs. Usage si.bus(n) : parallelMean(n) : _ Where: N : the number of parallel inputs known at compile time (ba.)parallelRMS The RMS of N parallel inputs. Usage si.bus(n) : parallelRMS(n) : _ Where: N : the number of parallel inputs known at compile time","title":" basics "},{"location":"libs/basics/#basicslib","text":"A library of basic elements. Its official prefix is ba .","title":"basics.lib"},{"location":"libs/basics/#conversion-tools","text":"","title":"Conversion Tools"},{"location":"libs/basics/#basamp2sec","text":"Converts a number of samples to a duration in seconds. samp2sec is a standard Faust function.","title":"(ba.)samp2sec"},{"location":"libs/basics/#usage","text":"samp2sec(n) : _ Where: n : number of samples","title":"Usage"},{"location":"libs/basics/#basec2samp","text":"Converts a duration in seconds to a number of samples. samp2sec is a standard Faust function.","title":"(ba.)sec2samp"},{"location":"libs/basics/#usage_1","text":"sec2samp(d) : _ Where: d : duration in seconds","title":"Usage"},{"location":"libs/basics/#badb2linear","text":"Converts a loudness in dB to a linear gain (0-1). db2linear is a standard Faust function.","title":"(ba.)db2linear"},{"location":"libs/basics/#usage_2","text":"db2linear(l) : _ Where: l : loudness in dB","title":"Usage"},{"location":"libs/basics/#balinear2db","text":"Converts a linear gain (0-1) to a loudness in dB. linear2db is a standard Faust function.","title":"(ba.)linear2db"},{"location":"libs/basics/#usage_3","text":"linear2db(g) : _ Where: g : a linear gain","title":"Usage"},{"location":"libs/basics/#balin2loggain","text":"Converts a linear gain (0-1) to a log gain (0-1).","title":"(ba.)lin2LogGain"},{"location":"libs/basics/#usage_4","text":"lin2LogGain(n) : _","title":"Usage"},{"location":"libs/basics/#balog2lingain","text":"Converts a log gain (0-1) to a linear gain (0-1).","title":"(ba.)log2LinGain"},{"location":"libs/basics/#usage_5","text":"log2LinGain(n) : _","title":"Usage"},{"location":"libs/basics/#batau2pole","text":"Returns a real pole giving exponential decay. Note that t60 (time to decay 60 dB) is ~6.91 time constants. tau2pole is a standard Faust function.","title":"(ba.)tau2pole"},{"location":"libs/basics/#usage_6","text":"_ : smooth(tau2pole(tau)) : _ Where: tau : time-constant in seconds","title":"Usage"},{"location":"libs/basics/#bapole2tau","text":"Returns the time-constant, in seconds, corresponding to the given real, positive pole in (0,1). pole2tau is a standard Faust function.","title":"(ba.)pole2tau"},{"location":"libs/basics/#usage_7","text":"pole2tau(pole) : _ Where: pole : the pole","title":"Usage"},{"location":"libs/basics/#bamidikey2hz","text":"Converts a MIDI key number to a frequency in Hz (MIDI key 69 = A440). midikey2hz is a standard Faust function.","title":"(ba.)midikey2hz"},{"location":"libs/basics/#usage_8","text":"midikey2hz(mk) : _ Where: mk : the MIDI key number","title":"Usage"},{"location":"libs/basics/#bahz2midikey","text":"Converts a frequency in Hz to a MIDI key number (MIDI key 69 = A440). hz2midikey is a standard Faust function.","title":"(ba.)hz2midikey"},{"location":"libs/basics/#usage_9","text":"hz2midikey(f) : _ Where: f : frequency in Hz","title":"Usage"},{"location":"libs/basics/#basemi2ratio","text":"Converts semitones in a frequency multiplicative ratio. semi2ratio is a standard Faust function.","title":"(ba.)semi2ratio"},{"location":"libs/basics/#usage_10","text":"semi2ratio(semi) : _ Where: semi : number of semitone","title":"Usage"},{"location":"libs/basics/#baratio2semi","text":"Converts a frequency multiplicative ratio in semitones. ratio2semi is a standard Faust function.","title":"(ba.)ratio2semi"},{"location":"libs/basics/#usage_11","text":"ratio2semi(ratio) : _ Where: ratio : frequency multiplicative ratio","title":"Usage"},{"location":"libs/basics/#bapianokey2hz","text":"Converts a piano key number to a frequency in Hz (piano key 49 = A440).","title":"(ba.)pianokey2hz"},{"location":"libs/basics/#usage_12","text":"pianokey2hz(pk) : _ Where: pk : the piano key number","title":"Usage"},{"location":"libs/basics/#bahz2pianokey","text":"Converts a frequency in Hz to a piano key number (piano key 49 = A440).","title":"(ba.)hz2pianokey"},{"location":"libs/basics/#usage_13","text":"hz2pianokey(f) : _ Where: f : frequency in Hz","title":"Usage"},{"location":"libs/basics/#counters-and-timetempo-tools","text":"","title":"Counters and Time/Tempo Tools"},{"location":"libs/basics/#bacountdown","text":"Starts counting down from n included to 0. While trig is 1 the output is n. The countdown starts with the transition of trig from 1 to 0. At the end of the countdown the output value will remain at 0 until the next trig. countdown is a standard Faust function.","title":"(ba.)countdown"},{"location":"libs/basics/#usage_14","text":"countdown(n,trig) : _ Where: n : the starting point of the countdown trig : the trigger signal (1: start at n ; 0: decrease until 0)","title":"Usage"},{"location":"libs/basics/#bacountup","text":"Starts counting up from 0 to n included. While trig is 1 the output is 0. The countup starts with the transition of trig from 1 to 0. At the end of the countup the output value will remain at n until the next trig. countup is a standard Faust function.","title":"(ba.)countup"},{"location":"libs/basics/#usage_15","text":"countup(n,trig) : _ Where: n : the maximum count value trig : the trigger signal (1: start at 0; 0: increase until n )","title":"Usage"},{"location":"libs/basics/#basweep","text":"Counts from 0 to period-1 repeatedly, generating a sawtooth waveform, like os.lf_rawsaw, starting at 1 when run transitions from 0 to 1. Outputs zero while run is 0.","title":"(ba.)sweep"},{"location":"libs/basics/#usage_16","text":"sweep(period,run) : _","title":"Usage"},{"location":"libs/basics/#batime","text":"A simple timer that counts every samples from the beginning of the process. time is a standard Faust function.","title":"(ba.)time"},{"location":"libs/basics/#usage_17","text":"time : _","title":"Usage"},{"location":"libs/basics/#baramp","text":"An linear ramp of 'n' samples to reach the next value","title":"(ba.)ramp"},{"location":"libs/basics/#usage_18","text":"_ : ramp(n) : _ Where: n : number of samples to reach the next value","title":"Usage"},{"location":"libs/basics/#batempo","text":"Converts a tempo in BPM into a number of samples.","title":"(ba.)tempo"},{"location":"libs/basics/#usage_19","text":"tempo(t) : _ Where: t : tempo in BPM","title":"Usage"},{"location":"libs/basics/#baperiod","text":"Basic sawtooth wave of period p .","title":"(ba.)period"},{"location":"libs/basics/#usage_20","text":"period(p) : _ Where: p : period as a number of samples","title":"Usage"},{"location":"libs/basics/#bapulse","text":"Pulses (10000) generated at period p .","title":"(ba.)pulse"},{"location":"libs/basics/#usage_21","text":"pulse(p) : _ Where: p : period as a number of samples","title":"Usage"},{"location":"libs/basics/#bapulsen","text":"Pulses (11110000) of length n generated at period p .","title":"(ba.)pulsen"},{"location":"libs/basics/#usage_22","text":"pulsen(n,p) : _ Where: n : pulse length as a number of samples p : period as a number of samples","title":"Usage"},{"location":"libs/basics/#bacycle","text":"Split nonzero input values into n cycles.","title":"(ba.)cycle"},{"location":"libs/basics/#usage_23","text":"_ : cycle(n) <: Where: n : the number of cycles/output signals","title":"Usage"},{"location":"libs/basics/#babeat","text":"Pulses at tempo t . beat is a standard Faust function.","title":"(ba.)beat"},{"location":"libs/basics/#usage_24","text":"beat(t) : _ Where: t : tempo in BPM","title":"Usage"},{"location":"libs/basics/#bapulse_countup","text":"Starts counting up pulses. While trig is 1 the output is counting up, while trig is 0 the counter is reset to 0.","title":"(ba.)pulse_countup"},{"location":"libs/basics/#usage_25","text":"_ : pulse_countup(trig) : _ Where: trig : the trigger signal (1: start at next pulse; 0: reset to 0)","title":"Usage"},{"location":"libs/basics/#bapulse_countdown","text":"Starts counting down pulses. While trig is 1 the output is counting down, while trig is 0 the counter is reset to 0.","title":"(ba.)pulse_countdown"},{"location":"libs/basics/#usage_26","text":"_ : pulse_countdown(trig) : _ Where: trig : the trigger signal (1: start at next pulse; 0: reset to 0)","title":"Usage"},{"location":"libs/basics/#bapulse_countup_loop","text":"Starts counting up pulses from 0 to n included. While trig is 1 the output is counting up, while trig is 0 the counter is reset to 0. At the end of the countup (n) the output value will be reset to 0.","title":"(ba.)pulse_countup_loop"},{"location":"libs/basics/#usage_27","text":"_ : pulse_countup_loop(n,trig) : _ Where: n : the highest number of the countup (included) before reset to 0 trig : the trigger signal (1: start at next pulse; 0: reset to 0)","title":"Usage"},{"location":"libs/basics/#baresetctr","text":"Function that lets through the mth impulse out of each consecutive group of n impulses.","title":"(ba.)resetCtr"},{"location":"libs/basics/#usage_28","text":"_ : resetCtr(n,m) : _ Where: n : the total number of impulses being split m : index of impulse to allow to be output","title":"Usage"},{"location":"libs/basics/#bapulse_countdown_loop","text":"Starts counting down pulses from 0 to n included. While trig is 1 the output is counting down, while trig is 0 the counter is reset to 0. At the end of the countdown (n) the output value will be reset to 0.","title":"(ba.)pulse_countdown_loop"},{"location":"libs/basics/#usage_29","text":"_ : pulse_countdown_loop(n,trig) : _ Where: n : the highest number of the countup (included) before reset to 0 trig : the trigger signal (1: start at next pulse; 0: reset to 0)","title":"Usage"},{"location":"libs/basics/#array-processingpattern-matching","text":"","title":"Array Processing/Pattern Matching"},{"location":"libs/basics/#bacount","text":"Count the number of elements of list l. count is a standard Faust function.","title":"(ba.)count"},{"location":"libs/basics/#usage_30","text":"count(l) count((10,20,30,40)) -> 4 Where: l : list of elements","title":"Usage"},{"location":"libs/basics/#batake","text":"Take an element from a list. take is a standard Faust function.","title":"(ba.)take"},{"location":"libs/basics/#usage_31","text":"take(P,l) take(3,(10,20,30,40)) -> 30 Where: P : position (int, known at compile time, P > 0) l : list of elements","title":"Usage"},{"location":"libs/basics/#basubseq","text":"Extract a part of a list.","title":"(ba.)subseq"},{"location":"libs/basics/#usage_32","text":"subseq(l, p, n) subseq((10,20,30,40,50,60), 1, 3) -> (20,30,40) subseq((10,20,30,40,50,60), 4, 1) -> 50 Where: l : list p : start point (0: begin of list) n : number of elements","title":"Usage"},{"location":"libs/basics/#note","text":"Faust doesn't have proper lists. Lists are simulated with parallel compositions and there is no empty list.","title":"Note:"},{"location":"libs/basics/#selectors-conditions","text":"","title":"Selectors (Conditions)"},{"location":"libs/basics/#baif","text":"if-then-else implemented with a select2. WARNING: since select2 is strict (always evaluating both branches), the resulting if does not have the usual \"lazy\" semantic of the C if form, and thus cannot be used to protect against forbidden computations like division-by-zero for instance.","title":"(ba.)if"},{"location":"libs/basics/#usage_33","text":"if(cond, then, else) : _ Where: cond : condition then : signal selected while cond is true else : signal selected while cond is false","title":"Usage"},{"location":"libs/basics/#baselector","text":"Selects the ith input among n at compile time.","title":"(ba.)selector"},{"location":"libs/basics/#usage_34","text":"selector(I,N) _,_,_,_ : selector(2,4) : _ // selects the 3rd input among 4 Where: I : input to select (int, numbered from 0, known at compile time) N : number of inputs (int, known at compile time, N > I) There is also cselector for selecting among complex input signals of the form (real,imag).","title":"Usage"},{"location":"libs/basics/#baselect2stereo","text":"Select between 2 stereo signals.","title":"(ba.)select2stereo"},{"location":"libs/basics/#usage_35","text":"_,_,_,_ : select2stereo(bpc) : _,_ Where: bpc : the selector switch (0/1)","title":"Usage"},{"location":"libs/basics/#baselectn","text":"Selects the ith input among N at run time.","title":"(ba.)selectn"},{"location":"libs/basics/#usage_36","text":"selectn(N,i) _,_,_,_ : selectn(4,2) : _ // selects the 3rd input among 4 Where: N : number of inputs (int, known at compile time, N > 0) i : input to select (int, numbered from 0)","title":"Usage"},{"location":"libs/basics/#example-test-program","text":"N = 64; process = par(n, N, (par(i,N,i) : selectn(N,n)));","title":"Example test program"},{"location":"libs/basics/#baselectmulti","text":"Selects the ith circuit among N at run time (all should have the same number of inputs and outputs) with a crossfade.","title":"(ba.)selectmulti"},{"location":"libs/basics/#usage_37","text":"selectmulti(n,lgen,id) Where: n : crossfade in samples lgen : list of circuits id : circuit to select (int, numbered from 0)","title":"Usage"},{"location":"libs/basics/#example-test-program_1","text":"process = selectmulti(ma.SR/10, ((3,9),(2,8),(5,7)), nentry(\"choice\", 0, 0, 2, 1)); process = selectmulti(ma.SR/10, ((_*3,_*9),(_*2,_*8),(_*5,_*7)), nentry(\"choice\", 0, 0, 2, 1));","title":"Example test program"},{"location":"libs/basics/#other","text":"","title":"Other"},{"location":"libs/basics/#balatch","text":"Latch input on positive-going transition of \"clock\" (\"sample-and-hold\").","title":"(ba.)latch"},{"location":"libs/basics/#usage_38","text":"_ : latch(clocksig) : _ Where: clocksig : hold trigger (0 for hold, 1 for bypass)","title":"Usage"},{"location":"libs/basics/#basandh","text":"Sample And Hold. sAndH is a standard Faust function.","title":"(ba.)sAndH"},{"location":"libs/basics/#usage_39","text":"_ : sAndH(t) : _ Where: t : hold trigger (0 for hold, 1 for bypass)","title":"Usage"},{"location":"libs/basics/#badownsample","text":"Down sample a signal. WARNING: this function doesn't change the rate of a signal, it just holds samples... downSample is a standard Faust function.","title":"(ba.)downSample"},{"location":"libs/basics/#usage_40","text":"_ : downSample(freq) : _ Where: freq : new rate in Hz","title":"Usage"},{"location":"libs/basics/#bapeakhold","text":"Outputs current max value above zero.","title":"(ba.)peakhold"},{"location":"libs/basics/#usage_41","text":"_ : peakhold(mode) : _; Where: mode means: 1 - Track and hold max value.","title":"Usage"},{"location":"libs/basics/#bapeakholder","text":"Tracks abs peak and holds peak for 'n' samples.","title":"(ba.)peakholder"},{"location":"libs/basics/#usage_42","text":"_ : peakholder(n) : _; Where: n : number of samples","title":"Usage"},{"location":"libs/basics/#baimpulsify","text":"Turns a signal into an impulse with the value of the current sample (0.3,0.2,0.1 becomes 0.3,0.0,0.0). This function is typically used with a button to turn its output into an impulse. impulsify is a standard Faust function.","title":"(ba.)impulsify"},{"location":"libs/basics/#usage_43","text":"button(\"gate\") : impulsify;","title":"Usage"},{"location":"libs/basics/#baautomat","text":"Record and replay to the values the input signal in a loop.","title":"(ba.)automat"},{"location":"libs/basics/#usage_44","text":"hslider(...) : automat(bps, size, init) : _","title":"Usage"},{"location":"libs/basics/#babpf","text":"bpf is an environment (a group of related definitions) that can be used to create break-point functions. It contains three functions: start(x,y) to start a break-point function end(x,y) to end a break-point function point(x,y) to add intermediate points to a break-point function A minimal break-point function must contain at least a start and an end point: f = bpf.start(x0,y0) : bpf.end(x1,y1); A more involved break-point function can contains any number of intermediate points: f = bpf.start(x0,y0) : bpf.point(x1,y1) : bpf.point(x2,y2) : bpf.end(x3,y3); In any case the x_{i} must be in increasing order (for all i , x_{i} < x_{i+1} ). For example the following definition: f = bpf.start(x0,y0) : ... : bpf.point(xi,yi) : ... : bpf.end(xn,yn); implements a break-point function f such that: f(x) = y_{0} when x < x_{0} f(x) = y_{n} when x > x_{n} f(x) = y_{i} + (y_{i+1}-y_{i})*(x-x_{i})/(x_{i+1}-x_{i}) when x_{i} <= x and x < x_{i+1} bpf is a standard Faust function.","title":"(ba.)bpf"},{"location":"libs/basics/#balistinterp","text":"Linearly interpolates between the elements of a list.","title":"(ba.)listInterp"},{"location":"libs/basics/#usage_45","text":"index = 1.69; // range is 0-4 process = listInterp((800,400,350,450,325),index); Where: index : the index (float) to interpolate between the different values. The range of index depends on the size of the list.","title":"Usage"},{"location":"libs/basics/#babypass1","text":"Takes a mono input signal, route it to e and bypass it if bpc = 1 . When bypassed, e is feed with zeros so that its state is cleanup up. bypass1 is a standard Faust function.","title":"(ba.)bypass1"},{"location":"libs/basics/#usage_46","text":"_ : bypass1(bpc,e) : _ Where: bpc : bypass switch (0/1) e : a mono effect","title":"Usage"},{"location":"libs/basics/#babypass2","text":"Takes a stereo input signal, route it to e and bypass it if bpc = 1 . When bypassed, e is feed with zeros so that its state is cleanup up. bypass2 is a standard Faust function.","title":"(ba.)bypass2"},{"location":"libs/basics/#usage_47","text":"_,_ : bypass2(bpc,e) : _,_ Where: bpc : bypass switch (0/1) e : a stereo effect","title":"Usage"},{"location":"libs/basics/#babypass1to2","text":"Bypass switch for effect e having mono input signal and stereo output. Effect e is bypassed if bpc = 1 .When bypassed, e is feed with zeros so that its state is cleanup up. bypass1to2 is a standard Faust function.","title":"(ba.)bypass1to2"},{"location":"libs/basics/#usage_48","text":"_ : bypass1to2(bpc,e) : _,_ Where: bpc : bypass switch (0/1) e : a mono-to-stereo effect","title":"Usage"},{"location":"libs/basics/#babypass_fade","text":"Bypass an arbitrary (N x N) circuit with 'n' samples crossfade. Inputs and outputs signals are faded out when 'e' is bypassed, so that 'e' state is cleanup up. Once bypassed the effect is replaced by par(i,N,_). Bypassed circuits can be chained.","title":"(ba.)bypass_fade"},{"location":"libs/basics/#usage_49","text":"_ : bypass_fade(n,b,e) : _ or _,_ : bypass_fade(n,b,e) : _,_ n : number of samples for the crossfade b : bypass switch (0/1) e : N x N circuit","title":"Usage"},{"location":"libs/basics/#examples","text":"process = bypass_fade(ma.SR/10, checkbox(\"bypass echo\"), echo); process = bypass_fade(ma.SR/10, checkbox(\"bypass reverb\"), freeverb);","title":"Examples"},{"location":"libs/basics/#batoggle","text":"Triggered by the change of 0 to 1, it toggles the output value between 0 and 1.","title":"(ba.)toggle"},{"location":"libs/basics/#usage_50","text":"_ : toggle : _","title":"Usage"},{"location":"libs/basics/#examples_1","text":"button(\"toggle\") : toggle : vbargraph(\"output\", 0, 1) (an.amp_follower(0.1) > 0.01) : toggle : vbargraph(\"output\", 0, 1) // takes audio input","title":"Examples"},{"location":"libs/basics/#baon_and_off","text":"The first channel set the output to 1, the second channel to 0.","title":"(ba.)on_and_off"},{"location":"libs/basics/#usage_51","text":"_ , _ : on_and_off : _","title":"Usage"},{"location":"libs/basics/#example","text":"button(\"on\"), button(\"off\") : on_and_off : vbargraph(\"output\", 0, 1)","title":"Example"},{"location":"libs/basics/#baselectoutn","text":"Route input to the output among N at run time.","title":"(ba.)selectoutn"},{"location":"libs/basics/#usage_52","text":"_ : selectoutn(N, i) : _,_,...N Where: N : number of outputs (int, known at compile time, N > 0) i : output number to route to (int, numbered from 0) (i.e. slider)","title":"Usage"},{"location":"libs/basics/#example_1","text":"process = 1 : selectoutn(3, sel) : par(i, 3, vbargraph(\"v.bargraph %i\", 0, 1)); sel = hslider(\"volume\", 0, 0, 2, 1) : int;","title":"Example"},{"location":"libs/basics/#sliding-reduce","text":"Provides various operations on the last N samples using a high order `slidingReduce(op,N,maxN,disabledVal,x)`` fold-like function: slidingSum(n) : the sliding sum of the last n input samples, CPU-light slidingSump(n,maxn) : the sliding sum of the last n input samples, numerically stable \"forever\" slidingMax(n,maxn) : the sliding max of the last n input samples slidingMin(n,maxn) : the sliding min of the last n input samples slidingMean(n) : the sliding mean of the last n input samples, CPU-light slidingMeanp(n,maxn) : the sliding mean of the last n input samples, numerically stable \"forever\" slidingRMS(n) : the sliding RMS of the last n input samples, CPU-light slidingRMSp(n,maxn) : the sliding RMS of the last n input samples, numerically stable \"forever\"","title":"Sliding Reduce"},{"location":"libs/basics/#working-principle","text":"If we want the maximum of the last 8 values, we can do that as: simpleMax(x) = ( ( max(x@0,x@1), max(x@2,x@3) ) :max ), ( ( max(x@4,x@5), max(x@6,x@7) ) :max ) :max; max(x@2,x@3) is the same as max(x@0,x@1)@2 but the latter re-uses a value we already computed,so is more efficient. Using the same trick for values 4 trough 7, we can write: efficientMax(x)= ( ( max(x@0,x@1), max(x@0,x@1)@2 ) :max ), ( ( max(x@0,x@1), max(x@0,x@1)@2 ) :max@4 ) :max; We can rewrite it recursively, so it becomes possible to get the maximum at have any number of values, as long as it's a power of 2. recursiveMax = case { (1,x) => x; (N,x) => max(recursiveMax(N/2,x), recursiveMax(N/2,x)@(N/2)); }; What if we want to look at a number of values that's not a power of 2? For each value, we will have to decide whether to use it or not. If N is bigger than the index of the value, we use it, otherwise we replace it with ( 0-(ma.INFINITY) ): variableMax(N,x) = max( max( ( (x@0 : useVal(0)), (x@1 : useVal(1)) ):max, ( (x@2 : useVal(2)), (x@3 : useVal(3)) ):max ), max( ( (x@4 : useVal(4)), (x@5 : useVal(5)) ):max, ( (x@6 : useVal(6)), (x@7 : useVal(7)) ):max ) ) with { useVal(i) = select2((N>=i) , (0-(ma.INFINITY)),_); }; Now it becomes impossible to re-use any values. To fix that let's first look at how we'd implement it using recursiveMax, but with a fixed N that is not a power of 2. For example, this is how you'd do it with N=3 : binaryMaxThree(x) = ( recursiveMax(1,x)@0, // the first x recursiveMax(2,x)@1 // the second and third x ):max; N=6 binaryMaxSix(x) = ( recursiveMax(2,x)@0, // first two recursiveMax(4,x)@2 // third trough sixth ):max; Note that recursiveMax(2,x) is used at a different delay then in binaryMaxThree , since it represents 1 and 2, not 2 and 3. Each block is delayed the combined size of the previous blocks. N=7 binaryMaxSeven(x) = ( ( recursiveMax(1,x)@0, // first x recursiveMax(2,x)@1 // second and third ):max, ( recursiveMax(4,x)@3 // fourth trough seventh ) ):max; To make a variable version, we need to know which powers of two are used, and at which delay time. Then it becomes a matter of: lining up all the different block sizes in parallel: the first par() statement delaying each the appropriate amount: sumOfPrevBlockSizes() turning it on or off: useVal() getting the maximum of all of them: combine() In Faust, we can only do that for a fixed maximum number of values: maxN variableBinaryMaxN(N,maxN,x) = par(i,maxNrBits,recursiveMax(pow2(i),x)@sumOfPrevBlockSizes(N,maxN,i) : useVal(i)) : combine(maxNrBits) with { // The sum of all the sizes of the previous blocks sumOfPrevBlockSizes(N,maxN,0) = 0; sumOfPrevBlockSizes(N,maxN,i) = (subseq((allBlockSizes(N,maxN)),0,i):>_); allBlockSizes(N,maxN) = par(i, maxNrBits, pow2(i) * isUsed(i) ); maxNrBits = int2nrOfBits(maxN); // get the maximum of all blocks combine(2) = max; combine(N) = max(combine(N-1),_); // Decide wether or not to use a certain value, based on N useVal(i) = select2(isUsed(i), (0-(ma.INFINITY)),_); isUsed(i) = take(i+1, (int2bin(N,maxN))); };","title":"Working Principle"},{"location":"libs/basics/#baslidingreduce","text":"Fold-like high order function. Apply a commutative binary operation to the last consecutive samples of a signal . For example : slidingReduce(max,128,128,-(ma.INFINITY)) will compute the maximum of the last 128 samples. The output is updated each sample, unlike reduce, where the output is constant for the duration of a block.","title":"(ba.)slidingReduce"},{"location":"libs/basics/#usage_53","text":"_ : slidingReduce(op,N,maxN,disabledVal) : _ Where: N : the number of values to process maxN : the maximum number of values to process, needs to be a power of 2 op : the operator. Needs to be a commutative one. disabledVal : the value to use when we want to ignore a value. In other words, op(x,disabledVal) should equal to x . For example, +(x,0) equals x and min(x,ma.INFINITY) equals x . So if we want to calculate the sum, we need to give 0 as disabledVal , and if we want the minimum, we need to give ma.INFINITY as disabledVal .","title":"Usage"},{"location":"libs/basics/#baslidingsum","text":"The sliding sum of the last n input samples. It will eventually run into numerical trouble when there is a persistent dc component. If that matters in your application, use the more CPU-intensive (ba.)slidingSump.","title":"(ba.)slidingSum"},{"location":"libs/basics/#usage_54","text":"_ : slidingSum(N) : _ Where: N : the number of values to process","title":"Usage"},{"location":"libs/basics/#baslidingsump","text":"The sliding sum of the last n input samples. It uses a lot more CPU then (ba.)slidingSum(n,maxn), but is numerically stable \"forever\" in return.","title":"(ba.)slidingSump"},{"location":"libs/basics/#usage_55","text":"_ : slidingSump(N,maxN) : _ Where: N : the number of values to process maxN : the maximum number of values to process, needs to be a power of 2","title":"Usage"},{"location":"libs/basics/#baslidingmax","text":"The sliding maximum of the last n input samples.","title":"(ba.)slidingMax"},{"location":"libs/basics/#usage_56","text":"_ : slidingMax(N,maxN) : _ Where: N : the number of values to process maxN : the maximum number of values to process, needs to be a power of 2","title":"Usage"},{"location":"libs/basics/#baslidingmin","text":"The sliding minimum of the last n input samples.","title":"(ba.)slidingMin"},{"location":"libs/basics/#usage_57","text":"_ : slidingMin(N,maxN) : _ Where: N : the number of values to process maxN : the maximum number of values to process, needs to be a power of 2","title":"Usage"},{"location":"libs/basics/#baslidingmean","text":"The sliding mean of the last n input samples. It will eventually run into numerical trouble when there is a persistent dc component. If that matters in your application, use the more CPU-intensive (ba.)slidinRMSp.","title":"(ba.)slidingMean"},{"location":"libs/basics/#usage_58","text":"_ : slidingMean(N,maxN) : _ Where: N : the number of values to process","title":"Usage"},{"location":"libs/basics/#baslidingmeanp","text":"The sliding mean of the last n input samples. It uses a lot more CPU then (ba.)slidingMean(n,maxn), but is numerically stable \"forever\" in return.","title":"(ba.)slidingMeanp"},{"location":"libs/basics/#usage_59","text":"_ : slidingMeanp(N,maxN) : _ Where: N : the number of values to process maxN : the maximum number of values to process, needs to be a power of 2","title":"Usage"},{"location":"libs/basics/#baslidingrms","text":"The root mean square of the last n input samples. It will eventually run into numerical trouble when there is a persistent dc component. If that matters in your application, use the more CPU-intensive (ba.)slidinRMSp.","title":"(ba.)slidingRMS"},{"location":"libs/basics/#usage_60","text":"_ : slidingRMS(N) : _ Where: N : the number of values to process","title":"Usage"},{"location":"libs/basics/#baslidingrmsp","text":"The root mean square of the last n input samples. It uses a lot more CPU then (ba.)slidingRMS(n,maxn), but is numerically stable \"forever\" in return.","title":"(ba.)slidingRMSp"},{"location":"libs/basics/#usage_61","text":"_ : slidingRMSp(N,maxN) : _ Where: N : the number of values to process maxN : the maximum number of values to process, needs to be a power of 2","title":"Usage"},{"location":"libs/basics/#parallel-operator","text":"Provides various operations on N parallel inputs using a high order parallelOp(op,N,x) function: parallelMax(n) : the max of n parallel inputs parallelMin(n) : the min of n parallel inputs parallelMean(n) : the mean of n parallel inputs parallelRMS(n) : the RMS of n parallel inputs","title":"Parallel Operator"},{"location":"libs/basics/#baparallelop","text":"Apply a commutative binary operation to N parallel inputs.","title":"(ba.)parallelOp"},{"location":"libs/basics/#usage_62","text":"si.bus(n) : parallelOp(op,n) : _ where: N : the number of parallel inputs known at compile time op : the operator which needs to be commutative","title":"usage"},{"location":"libs/basics/#baparallelmax","text":"The maximum of N parallel inputs.","title":"(ba.)parallelMax"},{"location":"libs/basics/#usage_63","text":"si.bus(n) : parallelMax(n) : _ Where: N : the number of parallel inputs known at compile time","title":"Usage"},{"location":"libs/basics/#baparallelmin","text":"The minimum of N parallel inputs.","title":"(ba.)parallelMin"},{"location":"libs/basics/#usage_64","text":"si.bus(n) : parallelMin(n) : _ Where: N : the number of parallel inputs known at compile time","title":"Usage"},{"location":"libs/basics/#baparallelmean","text":"The mean of N parallel inputs.","title":"(ba.)parallelMean"},{"location":"libs/basics/#usage_65","text":"si.bus(n) : parallelMean(n) : _ Where: N : the number of parallel inputs known at compile time","title":"Usage"},{"location":"libs/basics/#baparallelrms","text":"The RMS of N parallel inputs.","title":"(ba.)parallelRMS"},{"location":"libs/basics/#usage_66","text":"si.bus(n) : parallelRMS(n) : _ Where: N : the number of parallel inputs known at compile time","title":"Usage"},{"location":"libs/compressors/","text":"compressors.lib A library of compressor effects. Its official prefix is co . Functions Reference (co.)peak_compression_gain_mono Mono dynamic range compressor gain computer. peak_compression_gain_mono is a standard Faust function. Usage _ : peak_compression_gain_mono(strength,thresh,att,rel,knee,prePost) : _ Where: strength : strength of the compression (0 = no compression, 1 means hard limiting, >1 means over-compression) thresh : dB level threshold above which compression kicks in att : attack time = time constant (sec) when level & compression going up rel : release time = time constant (sec) coming out of compression knee : a gradual increase in gain reduction around the threshold: Below thresh-(knee/2) there is no gain reduction, above thresh+(knee/2) there is the same gain reduction as without a knee, and in between there is a gradual increase in gain reduction. prePost : places the level detector either at the input or after the gain computer; this turns it from a linear return-to-zero detector into a log domain return-to-threshold detector It uses a strength parameter instead of the traditional ratio, in order to be able to function as a hard limiter. For that you'd need a ratio of infinity:1, and you cannot express that in Faust Sometimes even bigger ratios are useful: For example a group recording where one instrument is recorded with both a close microphone and a room microphone, and the instrument is loud enough in the room mic when playing loud, but you want to boost it when it is playing soft. References http://en.wikipedia.org/wiki/Dynamic_range_compression Digital Dynamic Range Compressor Design A Tutorial and Analysis DIMITRIOS GIANNOULIS (Dimitrios.Giannoulis@eecs.qmul.ac.uk) MICHAEL MASSBERG (michael@massberg.org) AND JOSHUA D. REISS (josh.reiss@eecs.qmul.ac.uk) (co.)peak_compression_gain_N_chan N channel dynamic range compressor gain computer. peak_compression_gain_N_chan is a standard Faust function. Usage si.bus(N) : peak_compression_gain_N_chan(strength,thresh,att,rel,knee,prePost,link,N) : si.bus(N) Where: strength : strength of the compression (0 = no compression, 1 means hard limiting, >1 means over-compression) thresh : dB level threshold above which compression kicks in att : attack time = time constant (sec) when level & compression going up rel : release time = time constant (sec) coming out of compression knee : a gradual increase in gain reduction around the threshold: Below thresh-(knee/2) there is no gain reduction, above thresh+(knee/2) there is the same gain reduction as without a knee, and in between there is a gradual increase in gain reduction. prePost : places the level detector either at the input or after the gain computer; this turns it from a linear return-to-zero detector into a log domain return-to-threshold detector link : the amount of linkage between the channels. 0 = each channel is independent, 1 = all channels have the same amount of gain reduction N : the number of channels of the compressor It uses a strength parameter instead of the traditional ratio, in order to be able to function as a hard limiter. For that you'd need a ratio of infinity:1, and you cannot express that in Faust. Sometimes even bigger ratios are useful: for example a group recording where one instrument is recorded with both a close microphone and a room microphone, and the instrument is loud enough in the room mic when playing loud, but you want to boost it when it is playing soft. References http://en.wikipedia.org/wiki/Dynamic_range_compression Digital Dynamic Range Compressor Design A Tutorial and Analysis DIMITRIOS GIANNOULIS (Dimitrios.Giannoulis@eecs.qmul.ac.uk) MICHAEL MASSBERG (michael@massberg.org) AND JOSHUA D. REISS (josh.reiss@eecs.qmul.ac.uk) (co.)FFcompressor_N_chan feed forward N channel dynamic range compressor. FFcompressor_N_chan is a standard Faust function. Usage si.bus(N) : FFcompressor_N_chan(strength,thresh,att,rel,knee,prePost,link,meter,N) : si.bus(N) Where: strength : strength of the compression (0 = no compression, 1 means hard limiting, >1 means over-compression) thresh : dB level threshold above which compression kicks in att : attack time = time constant (sec) when level & compression going up rel : release time = time constant (sec) coming out of compression knee : a gradual increase in gain reduction around the threshold: Below thresh-(knee/2) there is no gain reduction, above thresh+(knee/2) there is the same gain reduction as without a knee, and in between there is a gradual increase in gain reduction. prePost : places the level detector either at the input or after the gain computer; this turns it from a linear return-to-zero detector into a log domain return-to-threshold detector link : the amount of linkage between the channels. 0 = each channel is independent, 1 = all channels have the same amount of gain reduction meter : a gain reduction meter. It can be implemented like so: meter = <:( , (ba.linear2db:max(maxGR):meter_group((hbargraph(\"[1][unit:dB][tooltip: gain reduction in dB]\", maxGR, 0))))):attach; N : the number of channels of the compressor It uses a strength parameter instead of the traditional ratio, in order to be able to function as a hard limiter. For that you'd need a ratio of infinity:1, and you cannot express that in Faust. Sometimes even bigger ratios are useful: for example a group recording where one instrument is recorded with both a close microphone and a room microphone, and the instrument is loud enough in the room mic when playing loud, but you want to boost it when it is playing soft. References http://en.wikipedia.org/wiki/Dynamic_range_compression Digital Dynamic Range Compressor Design A Tutorial and Analysis DIMITRIOS GIANNOULIS (Dimitrios.Giannoulis@eecs.qmul.ac.uk) MICHAEL MASSBERG (michael@massberg.org) AND JOSHUA D. REISS (josh.reiss@eecs.qmul.ac.uk) (co.)FBcompressor_N_chan feed back N channel dynamic range compressor. FBcompressor_N_chan is a standard Faust function. Usage si.bus(N) : FBcompressor_N_chan(strength,thresh,att,rel,knee,prePost,link,meter,N) : si.bus(N) Where: strength : strength of the compression (0 = no compression, 1 means hard limiting, >1 means over-compression) thresh : dB level threshold above which compression kicks in att : attack time = time constant (sec) when level & compression going up rel : release time = time constant (sec) coming out of compression knee : a gradual increase in gain reduction around the threshold: Below thresh-(knee/2) there is no gain reduction, above thresh+(knee/2) there is the same gain reduction as without a knee, and in between there is a gradual increase in gain reduction. prePost : places the level detector either at the input or after the gain computer; this turns it from a linear return-to-zero detector into a log domain return-to-threshold detector link : the amount of linkage between the channels. 0 = each channel is independent, 1 = all channels have the same amount of gain reduction meter : a gain reduction meter. It can be implemented like so: meter = <:( , (ba.linear2db:max(maxGR):meter_group((hbargraph(\"[1][unit:dB][tooltip: gain reduction in dB]\", maxGR, 0))))):attach; or it can be omitted by defining 'meter = _'. N : the number of channels of the compressor It uses a strength parameter instead of the traditional ratio, in order to be able to function as a hard limiter. For that you'd need a ratio of infinity:1, and you cannot express that in Faust. Sometimes even bigger ratios are useful: for example a group recording where one instrument is recorded with both a close microphone and a room microphone, and the instrument is loud enough in the room mic when playing loud, but you want to boost it when it is playing soft. References http://en.wikipedia.org/wiki/Dynamic_range_compression Digital Dynamic Range Compressor Design A Tutorial and Analysis DIMITRIOS GIANNOULIS (Dimitrios.Giannoulis@eecs.qmul.ac.uk) MICHAEL MASSBERG (michael@massberg.org) AND JOSHUA D. REISS (josh.reiss@eecs.qmul.ac.uk) (co.)FFFBcompressor_N_chan feed forward / feed back N channel dynamic range compressor. the feedback part has a much higher strength, so they end up sounding similar FFFBcompressor_N_chan is a standard Faust function. Usage si.bus(N) : FFFBcompressor_N_chan(strength,thresh,att,rel,knee,prePost,link,FBFF,meter,N) : si.bus(N) Where: strength : strength of the compression (0 = no compression, 1 means hard limiting, >1 means over-compression) thresh : dB level threshold above which compression kicks in att : attack time = time constant (sec) when level & compression going up rel : release time = time constant (sec) coming out of compression knee : a gradual increase in gain reduction around the threshold: Below thresh-(knee/2) there is no gain reduction, above thresh+(knee/2) there is the same gain reduction as without a knee, and in between there is a gradual increase in gain reduction. prePost : places the level detector either at the input or after the gain computer; this turns it from a linear return-to-zero detector into a log domain return-to-threshold detector link : the amount of linkage between the channels. 0 = each channel is independent, 1 = all channels have the same amount of gain reduction FFFB : fade between feed forward (0) and feed back (1) compression. meter : a gain reduction meter. It can be implemented like so: meter = <:( , (ba.linear2db:max(maxGR):meter_group((hbargraph(\"[1][unit:dB][tooltip: gain reduction in dB]\", maxGR, 0))))):attach; N : the number of channels of the compressor It uses a strength parameter instead of the traditional ratio, in order to be able to function as a hard limiter. For that you'd need a ratio of infinity:1, and you cannot express that in Faust. Sometimes even bigger ratios are useful: for example a group recording where one instrument is recorded with both a close microphone and a room microphone, and the instrument is loud enough in the room mic when playing loud, but you want to boost it when it is playing soft. References http://en.wikipedia.org/wiki/Dynamic_range_compression Digital Dynamic Range Compressor Design A Tutorial and Analysis DIMITRIOS GIANNOULIS (Dimitrios.Giannoulis@eecs.qmul.ac.uk) MICHAEL MASSBERG (michael@massberg.org) AND JOSHUA D. REISS (josh.reiss@eecs.qmul.ac.uk) (co.)RMS_compression_gain_mono Mono RMS dynamic range compressor gain computer. RMS_compression_gain_mono is a standard Faust function Usage _ : RMS_compression_gain_mono(strength,thresh,att,rel,knee,prePost) : _ Where: strength : strength of the compression (0 = no compression, 1 means hard limiting, >1 means over-compression) thresh : dB level threshold above which compression kicks in att : attack time = time constant (sec) when level & compression going up rel : release time = time constant (sec) coming out of compression knee : a gradual increase in gain reduction around the threshold: Below thresh-(knee/2) there is no gain reduction, above thresh+(knee/2) there is the same gain reduction as without a knee, and in between there is a gradual increase in gain reduction. prePost : places the level detector either at the input or after the gain computer; this turns it from a linear return-to-zero detector into a log domain return-to-threshold detector It uses a strength parameter instead of the traditional ratio, in order to be able to function as a hard limiter. For that you'd need a ratio of infinity:1, and you cannot express that in Faust. Sometimes even bigger ratios are useful: for example a group recording where one instrument is recorded with both a close microphone and a room microphone, and the instrument is loud enough in the room mic when playing loud, but you want to boost it when it is playing soft. References http://en.wikipedia.org/wiki/Dynamic_range_compression Digital Dynamic Range Compressor Design A Tutorial and Analysis DIMITRIOS GIANNOULIS (Dimitrios.Giannoulis@eecs.qmul.ac.uk) MICHAEL MASSBERG (michael@massberg.org) AND JOSHUA D. REISS (josh.reiss@eecs.qmul.ac.uk) (co.)RMS_compression_gain_N_chan RMS N channel dynamic range compressor gain computer. RMS_compression_gain_N_chan is a standard Faust function. Usage si.bus(N) : RMS_compression_gain_N_chan(strength,thresh,att,rel,knee,prePost,link,N) : si.bus(N) Where: strength : strength of the compression (0 = no compression, 1 means hard limiting, >1 means over-compression) thresh : dB level threshold above which compression kicks in att : attack time = time constant (sec) when level & compression going up rel : release time = time constant (sec) coming out of compression knee : a gradual increase in gain reduction around the threshold: Below thresh-(knee/2) there is no gain reduction, above thresh+(knee/2) there is the same gain reduction as without a knee, and in between there is a gradual increase in gain reduction. prePost : places the level detector either at the input or after the gain computer; this turns it from a linear return-to-zero detector into a log domain return-to-threshold detector link : the amount of linkage between the channels. 0 = each channel is independent, 1 = all channels have the same amount of gain reduction N : the number of channels of the compressor It uses a strength parameter instead of the traditional ratio, in order to be able to function as a hard limiter. For that you'd need a ratio of infinity:1, and you cannot express that in Faust. Sometimes even bigger ratios are useful: for example a group recording where one instrument is recorded with both a close microphone and a room microphone, and the instrument is loud enough in the room mic when playing loud, but you want to boost it when it is playing soft. References http://en.wikipedia.org/wiki/Dynamic_range_compression Digital Dynamic Range Compressor Design A Tutorial and Analysis DIMITRIOS GIANNOULIS (Dimitrios.Giannoulis@eecs.qmul.ac.uk) MICHAEL MASSBERG (michael@massberg.org) AND JOSHUA D. REISS (josh.reiss@eecs.qmul.ac.uk) (co.)RMS_FFFBcompressor_N_chan RMS feed forward / feed back N channel dynamic range compressor. the feedback part has a much higher strength, so they end up sounding similar RMS_FFFBcompressor_N_chan is a standard Faust function. Usage si.bus(N) : RMS_FFFBcompressor_N_chan(strength,thresh,att,rel,knee,prePost,link,FBFF,meter,N) : si.bus(N) Where: strength : strength of the compression (0 = no compression, 1 means hard limiting, >1 means over-compression) thresh : dB level threshold above which compression kicks in att : attack time = time constant (sec) when level & compression going up rel : release time = time constant (sec) coming out of compression knee : a gradual increase in gain reduction around the threshold: Below thresh-(knee/2) there is no gain reduction, above thresh+(knee/2) there is the same gain reduction as without a knee, and in between there is a gradual increase in gain reduction. prePost : places the level detector either at the input or after the gain computer; this turns it from a linear return-to-zero detector into a log domain return-to-threshold detector link : the amount of linkage between the channels. 0 = each channel is independent, 1 = all channels have the same amount of gain reduction FFFB : fade between feed forward (0) and feed back (1) compression. meter : a gain reduction meter. It can be implemented like so: meter = <:( , (ba.linear2db:max(maxGR):meter_group((hbargraph(\"[1][unit:dB][tooltip: gain reduction in dB]\", maxGR, 0))))):attach; N : the number of channels of the compressor It uses a strength parameter instead of the traditional ratio, in order to be able to function as a hard limiter. For that you'd need a ratio of infinity:1, and you cannot express that in Faust. Sometimes even bigger ratios are useful: for example a group recording where one instrument is recorded with both a close microphone and a room microphone, and the instrument is loud enough in the room mic when playing loud, but you want to boost it when it is playing soft. to save CPU we cheat a bit, in a similar way as in the original libs: instead of crosfading between two sets of gain calculators as above, we take the abs of the audio from both the FF and FB, and crossfade between those, and feed that into one set of gain calculators again the strength is much higher when in FB mode, but implemented differently References http://en.wikipedia.org/wiki/Dynamic_range_compression Digital Dynamic Range Compressor Design A Tutorial and Analysis DIMITRIOS GIANNOULIS (Dimitrios.Giannoulis@eecs.qmul.ac.uk) MICHAEL MASSBERG (michael@massberg.org) AND JOSHUA D. REISS (josh.reiss@eecs.qmul.ac.uk) (co.)RMS_FBcompressor_peak_limiter_N_chan N channel RMS feed back compressor into peak limiter feeding back into the FB compressor. By combining them this way, they complement each other optimally: The RMS compressor doesn't have to deal with the peaks, and the peak limiter get's spared from the steady state signal. the feedback part has a much higher strength, so they end up sounding similar RMS_FBcompressor_peak_limiter_N_chan is a standard Faust function. Usage si.bus(N) : RMS_FBcompressor_peak_limiter_N_chan(strength,thresh,threshLim,att,rel,knee,link,meter,N) : si.bus(N) Where: strength : strength of the compression (0 = no compression, 1 means hard limiting, >1 means over-compression) thresh : dB level threshold above which compression kicks in threshLim : dB level threshold above which the brick wall limiter kicks in att : attack time = time constant (sec) when level & compression going up this is also used as the release time of the limiter rel : release time = time constant (sec) coming out of compression knee : a gradual increase in gain reduction around the threshold: Below thresh-(knee/2) there is no gain reduction, above thresh+(knee/2) there is the same gain reduction as without a knee, and in between there is a gradual increase in gain reduction. the limiter uses a knee half this size link : the amount of linkage between the channels. 0 = each channel is independent, 1 = all channels have the same amount of gain reduction meter : a gain reduction meter. It can be implemented like so: meter = <:( , (ba.linear2db:max(maxGR):meter_group((hbargraph(\"[1][unit:dB][tooltip: gain reduction in dB]\", maxGR, 0))))):attach; N : the number of channels of the compressor It uses a strength parameter instead of the traditional ratio, in order to be able to function as a hard limiter. For that you'd need a ratio of infinity:1, and you cannot express that in Faust. Sometimes even bigger ratios are useful: for example a group recording where one instrument is recorded with both a close microphone and a room microphone, and the instrument is loud enough in the room mic when playing loud, but you want to boost it when it is playing soft. References http://en.wikipedia.org/wiki/Dynamic_range_compression Digital Dynamic Range Compressor Design A Tutorial and Analysis DIMITRIOS GIANNOULIS (Dimitrios.Giannoulis@eecs.qmul.ac.uk) MICHAEL MASSBERG (michael@massberg.org) AND JOSHUA D. REISS (josh.reiss@eecs.qmul.ac.uk) Original versions section The functions in this section are largely superseded by the limiters above, but we retain them for backward compatibility and for situations in which a more permissive, MIT-style license is required. Functions Reference (co.)compressor_lad_mono Mono dynamic range compressor with lookahead delay. compressor_lad_mono is a standard Faust function. Usage _ : compressor_lad_mono(lad,ratio,thresh,att,rel) : _ Where: lad : lookahead delay in seconds (nonnegative) - gets rounded to nearest sample. The effective attack time is a good setting. ratio : compression ratio (1 = no compression, >1 means compression) Ratios: 4 is moderate compression, 8 is strong compression, 12 is mild limiting, and 20 is pretty hard limiting at the threshold. thresh : dB level threshold above which compression kicks in (0 dB = max level) att : attack time = time constant (sec) when level & compression are going up rel : release time = time constant (sec) coming out of compression References http://en.wikipedia.org/wiki/Dynamic_range_compression https://ccrma.stanford.edu/~jos/filters/Nonlinear_Filter_Example_Dynamic.html Albert Graef's \"faust2pd\"/examples/synth/compressor_.dsp More features: https://github.com/magnetophon/faustCompressors (co.)compressor_mono Mono dynamic range compressors. compressor_mono is a standard Faust function. Usage _ : compressor_mono(ratio,thresh,att,rel) : _ Where: ratio : compression ratio (1 = no compression, >1 means compression) Ratios: 4 is moderate compression, 8 is strong compression, 12 is mild limiting, and 20 is pretty hard limiting at the threshold. thresh : dB level threshold above which compression kicks in (0 dB = max level) att : attack time = time constant (sec) when level & compression are going up rel : release time = time constant (sec) coming out of compression References http://en.wikipedia.org/wiki/Dynamic_range_compression https://ccrma.stanford.edu/~jos/filters/Nonlinear_Filter_Example_Dynamic.html Albert Graef's \"faust2pd\"/examples/synth/compressor_.dsp More features: https://github.com/magnetophon/faustCompressors (co.)compressor_stereo Stereo dynamic range compressors. Usage _,_ : compressor_stereo(ratio,thresh,att,rel) : _,_ Where: ratio : compression ratio (1 = no compression, >1 means compression) thresh : dB level threshold above which compression kicks in (0 dB = max level) att : attack time = time constant (sec) when level & compression going up rel : release time = time constant (sec) coming out of compression References http://en.wikipedia.org/wiki/Dynamic_range_compression https://ccrma.stanford.edu/~jos/filters/Nonlinear_Filter_Example_Dynamic.html Albert Graef's \"faust2pd\"/examples/synth/compressor_.dsp More features: https://github.com/magnetophon/faustCompressors (co.)compression_gain_mono Compression-gain calculation for dynamic range compressors. Usage _ : compression_gain_mono(ratio,thresh,att,rel) : _ Where: ratio : compression ratio (1 = no compression, >1 means compression) thresh : dB level threshold above which compression kicks in (0 dB = max level) att : attack time = time constant (sec) when level & compression going up rel : release time = time constant (sec) coming out of compression References http://en.wikipedia.org/wiki/Dynamic_range_compression https://ccrma.stanford.edu/~jos/filters/Nonlinear_Filter_Example_Dynamic.html Albert Graef's \"faust2pd\"/examples/synth/compressor_.dsp More features: https://github.com/magnetophon/faustCompressors (co.)limiter_1176_R4_mono A limiter guards against hard-clipping. It can be implemented as a compressor having a high threshold (near the clipping level), fast attack, and high ratio. Since the compression ratio is so high, some knee smoothing is desirable (for softer limiting). This example is intended to get you started using compressors as limiters, so all parameters are hardwired here to nominal values. Ratio: 4 (moderate compression) See compressor_mono() comments for a guide to other choices. Mike Shipley likes this (lowest) setting on the 1176. (Grammy award-winning mixer for Queen, Tom Petty, etc.) Thresh: -6 dB, meaning 4:1 compression begins at amplitude 1/2. Att: 800 MICROseconds (Note: scaled by ratio in the 1176) The 1176 range is said to be 20-800 microseconds. Faster attack gives \"more bite\" (e.g. on vocals), and makes hard-clipping less likely on fast overloads. Rel: 0.5 s (Note: scaled by ratio in the 1176) The 1176 range is said to be 50-1100 ms. The 1176 also has a \"bright, clear eq effect\" (use filters.lib if desired). limiter_1176_R4_mono is a standard Faust function. Usage _ : limiter_1176_R4_mono : _; Reference: http://en.wikipedia.org/wiki/1176_Peak_Limiter (co.)limiter_1176_R4_stereo A limiter guards against hard-clipping. It can be implemented as a compressor having a high threshold (near the clipping level), fast attack and release, and high ratio. Since the ratio is so high, some knee smoothing is desirable (\"soft limiting\"). This example is intended to get you started using compressor_* as a limiter, so all parameters are hardwired to nominal values here. Ratios: 4 (moderate compression), 8 (severe compression), 12 (mild limiting), or 20 to 1 (hard limiting) Att: 20-800 MICROseconds (Note: scaled by ratio in the 1176) Rel: 50-1100 ms (Note: scaled by ratio in the 1176) Mike Shipley likes 4:1 (Grammy-winning mixer for Queen, Tom Petty, etc.) Faster attack gives \"more bite\" (e.g. on vocals) He hears a bright, clear eq effect as well (not implemented here) Usage _,_ : limiter_1176_R4_stereo : _,_; Reference: http://en.wikipedia.org/wiki/1176_Peak_Limiter (co.)limiter_lad_N N-channel lookahead limiter inspired by IOhannes Zm\u00f6lnig's post, which is in turn based on the thesis by Peter Falkner \"Entwicklung eines digitalen Stereo-Limiters mit Hilfe des Signalprozessors DSP56001\". This version of the limiter uses a peak-holder with smoothed attack and release based on tau time constant filters. It is also possible to use a time constant that is 2 PI tau by dividing the attack and release times by 2*PI. This time constant allows for the amplitude profile to reach 1 - e^(-2pi) of the final peak after the attack time. The input path can be delayed by the same amount as the attack time to synchronise input and amplitude profile, realising a system that is particularly effective as a colourless (ideally) brickwall limiter. Note that the effectiveness of the ceiling settings are dependent on the other parameters, especially the time constant used for the smoothing filters and the lookahead delay. Similarly, the colourless characteristics are also dependent on attack, hold, and release times. Since fluctuations above ~15 Hz are perceived as timbral effects, [Vassilakis and Kendall 2010] it is reasonable to set the attack time to 1/15 seconds for a smooth amplitude modulation. On the other hand, the hold time can be set to the peak-to-peak period of the expected lowest frequency in the signal, which allows for minimal distortion of the low frequencies. The release time can then provide a perceptually linear and gradual gain increase determined by the user for any specific application. The scaling factor for all the channels is determined by the loudest peak between them all, so that amplitude ratios between the signals are kept. Usage si.bus(N) : limiter_lad_N(N, LD, ceiling, attack, hold, release) : si.bus(N); Where: N is the number of channels, known at compile-time. LD is the lookahead delay in seconds, known at compile-time. ceiling is the linear amplitude output limit. attack is the attack time in seconds. hold is the hold time in seconds. release is the release time in seconds. Example for a stereo limiter: limiter_lad_N(2, .01, 1, .01, .1, 1); Reference: http://iem.at/~zmoelnig/publications/limiter/ . (co.)limiter_lad_mono Specialised case of limiter_lad_N: mono limiter. Usage _ : limiter_lad_mono(LD, ceiling, attack, hold, release) : _; Where: LD is the lookahead delay in seconds, known at compile-time. ceiling is the linear amplitude output limit. attack is the attack time in seconds. hold is the hold time in seconds. release is the release time in seconds. Reference: http://iem.at/~zmoelnig/publications/limiter/ . (co.)limiter_lad_stereo Specialised case of limiter_lad_N: stereo limiter. Usage _ , _ : limiter_lad_stereo(LD, ceiling, attack, hold, release) : _ , _; Where: LD is the lookahead delay in seconds, known at compile-time. ceiling is the linear amplitude output limit. attack is the attack time in seconds. hold is the hold time in seconds. release is the release time in seconds. Reference: http://iem.at/~zmoelnig/publications/limiter/ . (co.)limiter_lad_quad Specialised case of limiter_lad_N: quadraphonic limiter. Usage si.bus(4) : limiter_lad_quad(LD, ceiling, attack, hold, release) : si.bus(4); Where: LD is the lookahead delay in seconds, known at compile-time. ceiling is the linear amplitude output limit. attack is the attack time in seconds. hold is the hold time in seconds. release is the release time in seconds. Reference: http://iem.at/~zmoelnig/publications/limiter/ . (co.)limiter_lad_bw Specialised case of limiter_lad_N and ready-to-use unit-amplitude mono limiting function. This implementation, in particular, uses 2pi*tau time constant filters for attack and release smoothing with synchronised input and gain signals. This function's best application is to be used as a brickwall limiter with the least colouring artefacts while keeping a not-so-slow release curve. Tests have shown that, given a pop song with 60 dB of amplification and a 0-dB-ceiling, the loudest peak recorded was ~0.38 dB. Usage _ : limiter_lad_bw : _; Reference: http://iem.at/~zmoelnig/publications/limiter/ .","title":" compressors "},{"location":"libs/compressors/#compressorslib","text":"A library of compressor effects. Its official prefix is co .","title":"compressors.lib"},{"location":"libs/compressors/#functions-reference","text":"","title":"Functions Reference"},{"location":"libs/compressors/#copeak_compression_gain_mono","text":"Mono dynamic range compressor gain computer. peak_compression_gain_mono is a standard Faust function.","title":"(co.)peak_compression_gain_mono"},{"location":"libs/compressors/#usage","text":"_ : peak_compression_gain_mono(strength,thresh,att,rel,knee,prePost) : _ Where: strength : strength of the compression (0 = no compression, 1 means hard limiting, >1 means over-compression) thresh : dB level threshold above which compression kicks in att : attack time = time constant (sec) when level & compression going up rel : release time = time constant (sec) coming out of compression knee : a gradual increase in gain reduction around the threshold: Below thresh-(knee/2) there is no gain reduction, above thresh+(knee/2) there is the same gain reduction as without a knee, and in between there is a gradual increase in gain reduction. prePost : places the level detector either at the input or after the gain computer; this turns it from a linear return-to-zero detector into a log domain return-to-threshold detector It uses a strength parameter instead of the traditional ratio, in order to be able to function as a hard limiter. For that you'd need a ratio of infinity:1, and you cannot express that in Faust Sometimes even bigger ratios are useful: For example a group recording where one instrument is recorded with both a close microphone and a room microphone, and the instrument is loud enough in the room mic when playing loud, but you want to boost it when it is playing soft.","title":"Usage"},{"location":"libs/compressors/#references","text":"http://en.wikipedia.org/wiki/Dynamic_range_compression Digital Dynamic Range Compressor Design A Tutorial and Analysis DIMITRIOS GIANNOULIS (Dimitrios.Giannoulis@eecs.qmul.ac.uk) MICHAEL MASSBERG (michael@massberg.org) AND JOSHUA D. REISS (josh.reiss@eecs.qmul.ac.uk)","title":"References"},{"location":"libs/compressors/#copeak_compression_gain_n_chan","text":"N channel dynamic range compressor gain computer. peak_compression_gain_N_chan is a standard Faust function.","title":"(co.)peak_compression_gain_N_chan"},{"location":"libs/compressors/#usage_1","text":"si.bus(N) : peak_compression_gain_N_chan(strength,thresh,att,rel,knee,prePost,link,N) : si.bus(N) Where: strength : strength of the compression (0 = no compression, 1 means hard limiting, >1 means over-compression) thresh : dB level threshold above which compression kicks in att : attack time = time constant (sec) when level & compression going up rel : release time = time constant (sec) coming out of compression knee : a gradual increase in gain reduction around the threshold: Below thresh-(knee/2) there is no gain reduction, above thresh+(knee/2) there is the same gain reduction as without a knee, and in between there is a gradual increase in gain reduction. prePost : places the level detector either at the input or after the gain computer; this turns it from a linear return-to-zero detector into a log domain return-to-threshold detector link : the amount of linkage between the channels. 0 = each channel is independent, 1 = all channels have the same amount of gain reduction N : the number of channels of the compressor It uses a strength parameter instead of the traditional ratio, in order to be able to function as a hard limiter. For that you'd need a ratio of infinity:1, and you cannot express that in Faust. Sometimes even bigger ratios are useful: for example a group recording where one instrument is recorded with both a close microphone and a room microphone, and the instrument is loud enough in the room mic when playing loud, but you want to boost it when it is playing soft.","title":"Usage"},{"location":"libs/compressors/#references_1","text":"http://en.wikipedia.org/wiki/Dynamic_range_compression Digital Dynamic Range Compressor Design A Tutorial and Analysis DIMITRIOS GIANNOULIS (Dimitrios.Giannoulis@eecs.qmul.ac.uk) MICHAEL MASSBERG (michael@massberg.org) AND JOSHUA D. REISS (josh.reiss@eecs.qmul.ac.uk)","title":"References"},{"location":"libs/compressors/#coffcompressor_n_chan","text":"feed forward N channel dynamic range compressor. FFcompressor_N_chan is a standard Faust function.","title":"(co.)FFcompressor_N_chan"},{"location":"libs/compressors/#usage_2","text":"si.bus(N) : FFcompressor_N_chan(strength,thresh,att,rel,knee,prePost,link,meter,N) : si.bus(N) Where: strength : strength of the compression (0 = no compression, 1 means hard limiting, >1 means over-compression) thresh : dB level threshold above which compression kicks in att : attack time = time constant (sec) when level & compression going up rel : release time = time constant (sec) coming out of compression knee : a gradual increase in gain reduction around the threshold: Below thresh-(knee/2) there is no gain reduction, above thresh+(knee/2) there is the same gain reduction as without a knee, and in between there is a gradual increase in gain reduction. prePost : places the level detector either at the input or after the gain computer; this turns it from a linear return-to-zero detector into a log domain return-to-threshold detector link : the amount of linkage between the channels. 0 = each channel is independent, 1 = all channels have the same amount of gain reduction meter : a gain reduction meter. It can be implemented like so: meter = <:( , (ba.linear2db:max(maxGR):meter_group((hbargraph(\"[1][unit:dB][tooltip: gain reduction in dB]\", maxGR, 0))))):attach; N : the number of channels of the compressor It uses a strength parameter instead of the traditional ratio, in order to be able to function as a hard limiter. For that you'd need a ratio of infinity:1, and you cannot express that in Faust. Sometimes even bigger ratios are useful: for example a group recording where one instrument is recorded with both a close microphone and a room microphone, and the instrument is loud enough in the room mic when playing loud, but you want to boost it when it is playing soft.","title":"Usage"},{"location":"libs/compressors/#references_2","text":"http://en.wikipedia.org/wiki/Dynamic_range_compression Digital Dynamic Range Compressor Design A Tutorial and Analysis DIMITRIOS GIANNOULIS (Dimitrios.Giannoulis@eecs.qmul.ac.uk) MICHAEL MASSBERG (michael@massberg.org) AND JOSHUA D. REISS (josh.reiss@eecs.qmul.ac.uk)","title":"References"},{"location":"libs/compressors/#cofbcompressor_n_chan","text":"feed back N channel dynamic range compressor. FBcompressor_N_chan is a standard Faust function.","title":"(co.)FBcompressor_N_chan"},{"location":"libs/compressors/#usage_3","text":"si.bus(N) : FBcompressor_N_chan(strength,thresh,att,rel,knee,prePost,link,meter,N) : si.bus(N) Where: strength : strength of the compression (0 = no compression, 1 means hard limiting, >1 means over-compression) thresh : dB level threshold above which compression kicks in att : attack time = time constant (sec) when level & compression going up rel : release time = time constant (sec) coming out of compression knee : a gradual increase in gain reduction around the threshold: Below thresh-(knee/2) there is no gain reduction, above thresh+(knee/2) there is the same gain reduction as without a knee, and in between there is a gradual increase in gain reduction. prePost : places the level detector either at the input or after the gain computer; this turns it from a linear return-to-zero detector into a log domain return-to-threshold detector link : the amount of linkage between the channels. 0 = each channel is independent, 1 = all channels have the same amount of gain reduction meter : a gain reduction meter. It can be implemented like so: meter = <:( , (ba.linear2db:max(maxGR):meter_group((hbargraph(\"[1][unit:dB][tooltip: gain reduction in dB]\", maxGR, 0))))):attach; or it can be omitted by defining 'meter = _'. N : the number of channels of the compressor It uses a strength parameter instead of the traditional ratio, in order to be able to function as a hard limiter. For that you'd need a ratio of infinity:1, and you cannot express that in Faust. Sometimes even bigger ratios are useful: for example a group recording where one instrument is recorded with both a close microphone and a room microphone, and the instrument is loud enough in the room mic when playing loud, but you want to boost it when it is playing soft.","title":"Usage"},{"location":"libs/compressors/#references_3","text":"http://en.wikipedia.org/wiki/Dynamic_range_compression Digital Dynamic Range Compressor Design A Tutorial and Analysis DIMITRIOS GIANNOULIS (Dimitrios.Giannoulis@eecs.qmul.ac.uk) MICHAEL MASSBERG (michael@massberg.org) AND JOSHUA D. REISS (josh.reiss@eecs.qmul.ac.uk)","title":"References"},{"location":"libs/compressors/#cofffbcompressor_n_chan","text":"feed forward / feed back N channel dynamic range compressor. the feedback part has a much higher strength, so they end up sounding similar FFFBcompressor_N_chan is a standard Faust function.","title":"(co.)FFFBcompressor_N_chan"},{"location":"libs/compressors/#usage_4","text":"si.bus(N) : FFFBcompressor_N_chan(strength,thresh,att,rel,knee,prePost,link,FBFF,meter,N) : si.bus(N) Where: strength : strength of the compression (0 = no compression, 1 means hard limiting, >1 means over-compression) thresh : dB level threshold above which compression kicks in att : attack time = time constant (sec) when level & compression going up rel : release time = time constant (sec) coming out of compression knee : a gradual increase in gain reduction around the threshold: Below thresh-(knee/2) there is no gain reduction, above thresh+(knee/2) there is the same gain reduction as without a knee, and in between there is a gradual increase in gain reduction. prePost : places the level detector either at the input or after the gain computer; this turns it from a linear return-to-zero detector into a log domain return-to-threshold detector link : the amount of linkage between the channels. 0 = each channel is independent, 1 = all channels have the same amount of gain reduction FFFB : fade between feed forward (0) and feed back (1) compression. meter : a gain reduction meter. It can be implemented like so: meter = <:( , (ba.linear2db:max(maxGR):meter_group((hbargraph(\"[1][unit:dB][tooltip: gain reduction in dB]\", maxGR, 0))))):attach; N : the number of channels of the compressor It uses a strength parameter instead of the traditional ratio, in order to be able to function as a hard limiter. For that you'd need a ratio of infinity:1, and you cannot express that in Faust. Sometimes even bigger ratios are useful: for example a group recording where one instrument is recorded with both a close microphone and a room microphone, and the instrument is loud enough in the room mic when playing loud, but you want to boost it when it is playing soft.","title":"Usage"},{"location":"libs/compressors/#references_4","text":"http://en.wikipedia.org/wiki/Dynamic_range_compression Digital Dynamic Range Compressor Design A Tutorial and Analysis DIMITRIOS GIANNOULIS (Dimitrios.Giannoulis@eecs.qmul.ac.uk) MICHAEL MASSBERG (michael@massberg.org) AND JOSHUA D. REISS (josh.reiss@eecs.qmul.ac.uk)","title":"References"},{"location":"libs/compressors/#corms_compression_gain_mono","text":"Mono RMS dynamic range compressor gain computer. RMS_compression_gain_mono is a standard Faust function","title":"(co.)RMS_compression_gain_mono"},{"location":"libs/compressors/#usage_5","text":"_ : RMS_compression_gain_mono(strength,thresh,att,rel,knee,prePost) : _ Where: strength : strength of the compression (0 = no compression, 1 means hard limiting, >1 means over-compression) thresh : dB level threshold above which compression kicks in att : attack time = time constant (sec) when level & compression going up rel : release time = time constant (sec) coming out of compression knee : a gradual increase in gain reduction around the threshold: Below thresh-(knee/2) there is no gain reduction, above thresh+(knee/2) there is the same gain reduction as without a knee, and in between there is a gradual increase in gain reduction. prePost : places the level detector either at the input or after the gain computer; this turns it from a linear return-to-zero detector into a log domain return-to-threshold detector It uses a strength parameter instead of the traditional ratio, in order to be able to function as a hard limiter. For that you'd need a ratio of infinity:1, and you cannot express that in Faust. Sometimes even bigger ratios are useful: for example a group recording where one instrument is recorded with both a close microphone and a room microphone, and the instrument is loud enough in the room mic when playing loud, but you want to boost it when it is playing soft.","title":"Usage"},{"location":"libs/compressors/#references_5","text":"http://en.wikipedia.org/wiki/Dynamic_range_compression Digital Dynamic Range Compressor Design A Tutorial and Analysis DIMITRIOS GIANNOULIS (Dimitrios.Giannoulis@eecs.qmul.ac.uk) MICHAEL MASSBERG (michael@massberg.org) AND JOSHUA D. REISS (josh.reiss@eecs.qmul.ac.uk)","title":"References"},{"location":"libs/compressors/#corms_compression_gain_n_chan","text":"RMS N channel dynamic range compressor gain computer. RMS_compression_gain_N_chan is a standard Faust function.","title":"(co.)RMS_compression_gain_N_chan"},{"location":"libs/compressors/#usage_6","text":"si.bus(N) : RMS_compression_gain_N_chan(strength,thresh,att,rel,knee,prePost,link,N) : si.bus(N) Where: strength : strength of the compression (0 = no compression, 1 means hard limiting, >1 means over-compression) thresh : dB level threshold above which compression kicks in att : attack time = time constant (sec) when level & compression going up rel : release time = time constant (sec) coming out of compression knee : a gradual increase in gain reduction around the threshold: Below thresh-(knee/2) there is no gain reduction, above thresh+(knee/2) there is the same gain reduction as without a knee, and in between there is a gradual increase in gain reduction. prePost : places the level detector either at the input or after the gain computer; this turns it from a linear return-to-zero detector into a log domain return-to-threshold detector link : the amount of linkage between the channels. 0 = each channel is independent, 1 = all channels have the same amount of gain reduction N : the number of channels of the compressor It uses a strength parameter instead of the traditional ratio, in order to be able to function as a hard limiter. For that you'd need a ratio of infinity:1, and you cannot express that in Faust. Sometimes even bigger ratios are useful: for example a group recording where one instrument is recorded with both a close microphone and a room microphone, and the instrument is loud enough in the room mic when playing loud, but you want to boost it when it is playing soft.","title":"Usage"},{"location":"libs/compressors/#references_6","text":"http://en.wikipedia.org/wiki/Dynamic_range_compression Digital Dynamic Range Compressor Design A Tutorial and Analysis DIMITRIOS GIANNOULIS (Dimitrios.Giannoulis@eecs.qmul.ac.uk) MICHAEL MASSBERG (michael@massberg.org) AND JOSHUA D. REISS (josh.reiss@eecs.qmul.ac.uk)","title":"References"},{"location":"libs/compressors/#corms_fffbcompressor_n_chan","text":"RMS feed forward / feed back N channel dynamic range compressor. the feedback part has a much higher strength, so they end up sounding similar RMS_FFFBcompressor_N_chan is a standard Faust function.","title":"(co.)RMS_FFFBcompressor_N_chan"},{"location":"libs/compressors/#usage_7","text":"si.bus(N) : RMS_FFFBcompressor_N_chan(strength,thresh,att,rel,knee,prePost,link,FBFF,meter,N) : si.bus(N) Where: strength : strength of the compression (0 = no compression, 1 means hard limiting, >1 means over-compression) thresh : dB level threshold above which compression kicks in att : attack time = time constant (sec) when level & compression going up rel : release time = time constant (sec) coming out of compression knee : a gradual increase in gain reduction around the threshold: Below thresh-(knee/2) there is no gain reduction, above thresh+(knee/2) there is the same gain reduction as without a knee, and in between there is a gradual increase in gain reduction. prePost : places the level detector either at the input or after the gain computer; this turns it from a linear return-to-zero detector into a log domain return-to-threshold detector link : the amount of linkage between the channels. 0 = each channel is independent, 1 = all channels have the same amount of gain reduction FFFB : fade between feed forward (0) and feed back (1) compression. meter : a gain reduction meter. It can be implemented like so: meter = <:( , (ba.linear2db:max(maxGR):meter_group((hbargraph(\"[1][unit:dB][tooltip: gain reduction in dB]\", maxGR, 0))))):attach; N : the number of channels of the compressor It uses a strength parameter instead of the traditional ratio, in order to be able to function as a hard limiter. For that you'd need a ratio of infinity:1, and you cannot express that in Faust. Sometimes even bigger ratios are useful: for example a group recording where one instrument is recorded with both a close microphone and a room microphone, and the instrument is loud enough in the room mic when playing loud, but you want to boost it when it is playing soft. to save CPU we cheat a bit, in a similar way as in the original libs: instead of crosfading between two sets of gain calculators as above, we take the abs of the audio from both the FF and FB, and crossfade between those, and feed that into one set of gain calculators again the strength is much higher when in FB mode, but implemented differently","title":"Usage"},{"location":"libs/compressors/#references_7","text":"http://en.wikipedia.org/wiki/Dynamic_range_compression Digital Dynamic Range Compressor Design A Tutorial and Analysis DIMITRIOS GIANNOULIS (Dimitrios.Giannoulis@eecs.qmul.ac.uk) MICHAEL MASSBERG (michael@massberg.org) AND JOSHUA D. REISS (josh.reiss@eecs.qmul.ac.uk)","title":"References"},{"location":"libs/compressors/#corms_fbcompressor_peak_limiter_n_chan","text":"N channel RMS feed back compressor into peak limiter feeding back into the FB compressor. By combining them this way, they complement each other optimally: The RMS compressor doesn't have to deal with the peaks, and the peak limiter get's spared from the steady state signal. the feedback part has a much higher strength, so they end up sounding similar RMS_FBcompressor_peak_limiter_N_chan is a standard Faust function.","title":"(co.)RMS_FBcompressor_peak_limiter_N_chan"},{"location":"libs/compressors/#usage_8","text":"si.bus(N) : RMS_FBcompressor_peak_limiter_N_chan(strength,thresh,threshLim,att,rel,knee,link,meter,N) : si.bus(N) Where: strength : strength of the compression (0 = no compression, 1 means hard limiting, >1 means over-compression) thresh : dB level threshold above which compression kicks in threshLim : dB level threshold above which the brick wall limiter kicks in att : attack time = time constant (sec) when level & compression going up this is also used as the release time of the limiter rel : release time = time constant (sec) coming out of compression knee : a gradual increase in gain reduction around the threshold: Below thresh-(knee/2) there is no gain reduction, above thresh+(knee/2) there is the same gain reduction as without a knee, and in between there is a gradual increase in gain reduction. the limiter uses a knee half this size link : the amount of linkage between the channels. 0 = each channel is independent, 1 = all channels have the same amount of gain reduction meter : a gain reduction meter. It can be implemented like so: meter = <:( , (ba.linear2db:max(maxGR):meter_group((hbargraph(\"[1][unit:dB][tooltip: gain reduction in dB]\", maxGR, 0))))):attach; N : the number of channels of the compressor It uses a strength parameter instead of the traditional ratio, in order to be able to function as a hard limiter. For that you'd need a ratio of infinity:1, and you cannot express that in Faust. Sometimes even bigger ratios are useful: for example a group recording where one instrument is recorded with both a close microphone and a room microphone, and the instrument is loud enough in the room mic when playing loud, but you want to boost it when it is playing soft.","title":"Usage"},{"location":"libs/compressors/#references_8","text":"http://en.wikipedia.org/wiki/Dynamic_range_compression Digital Dynamic Range Compressor Design A Tutorial and Analysis DIMITRIOS GIANNOULIS (Dimitrios.Giannoulis@eecs.qmul.ac.uk) MICHAEL MASSBERG (michael@massberg.org) AND JOSHUA D. REISS (josh.reiss@eecs.qmul.ac.uk)","title":"References"},{"location":"libs/compressors/#original-versions-section","text":"The functions in this section are largely superseded by the limiters above, but we retain them for backward compatibility and for situations in which a more permissive, MIT-style license is required.","title":"Original versions section"},{"location":"libs/compressors/#functions-reference_1","text":"","title":"Functions Reference"},{"location":"libs/compressors/#cocompressor_lad_mono","text":"Mono dynamic range compressor with lookahead delay. compressor_lad_mono is a standard Faust function.","title":"(co.)compressor_lad_mono"},{"location":"libs/compressors/#usage_9","text":"_ : compressor_lad_mono(lad,ratio,thresh,att,rel) : _ Where: lad : lookahead delay in seconds (nonnegative) - gets rounded to nearest sample. The effective attack time is a good setting. ratio : compression ratio (1 = no compression, >1 means compression) Ratios: 4 is moderate compression, 8 is strong compression, 12 is mild limiting, and 20 is pretty hard limiting at the threshold. thresh : dB level threshold above which compression kicks in (0 dB = max level) att : attack time = time constant (sec) when level & compression are going up rel : release time = time constant (sec) coming out of compression","title":"Usage"},{"location":"libs/compressors/#references_9","text":"http://en.wikipedia.org/wiki/Dynamic_range_compression https://ccrma.stanford.edu/~jos/filters/Nonlinear_Filter_Example_Dynamic.html Albert Graef's \"faust2pd\"/examples/synth/compressor_.dsp More features: https://github.com/magnetophon/faustCompressors","title":"References"},{"location":"libs/compressors/#cocompressor_mono","text":"Mono dynamic range compressors. compressor_mono is a standard Faust function.","title":"(co.)compressor_mono"},{"location":"libs/compressors/#usage_10","text":"_ : compressor_mono(ratio,thresh,att,rel) : _ Where: ratio : compression ratio (1 = no compression, >1 means compression) Ratios: 4 is moderate compression, 8 is strong compression, 12 is mild limiting, and 20 is pretty hard limiting at the threshold. thresh : dB level threshold above which compression kicks in (0 dB = max level) att : attack time = time constant (sec) when level & compression are going up rel : release time = time constant (sec) coming out of compression","title":"Usage"},{"location":"libs/compressors/#references_10","text":"http://en.wikipedia.org/wiki/Dynamic_range_compression https://ccrma.stanford.edu/~jos/filters/Nonlinear_Filter_Example_Dynamic.html Albert Graef's \"faust2pd\"/examples/synth/compressor_.dsp More features: https://github.com/magnetophon/faustCompressors","title":"References"},{"location":"libs/compressors/#cocompressor_stereo","text":"Stereo dynamic range compressors.","title":"(co.)compressor_stereo"},{"location":"libs/compressors/#usage_11","text":"_,_ : compressor_stereo(ratio,thresh,att,rel) : _,_ Where: ratio : compression ratio (1 = no compression, >1 means compression) thresh : dB level threshold above which compression kicks in (0 dB = max level) att : attack time = time constant (sec) when level & compression going up rel : release time = time constant (sec) coming out of compression","title":"Usage"},{"location":"libs/compressors/#references_11","text":"http://en.wikipedia.org/wiki/Dynamic_range_compression https://ccrma.stanford.edu/~jos/filters/Nonlinear_Filter_Example_Dynamic.html Albert Graef's \"faust2pd\"/examples/synth/compressor_.dsp More features: https://github.com/magnetophon/faustCompressors","title":"References"},{"location":"libs/compressors/#cocompression_gain_mono","text":"Compression-gain calculation for dynamic range compressors.","title":"(co.)compression_gain_mono"},{"location":"libs/compressors/#usage_12","text":"_ : compression_gain_mono(ratio,thresh,att,rel) : _ Where: ratio : compression ratio (1 = no compression, >1 means compression) thresh : dB level threshold above which compression kicks in (0 dB = max level) att : attack time = time constant (sec) when level & compression going up rel : release time = time constant (sec) coming out of compression","title":"Usage"},{"location":"libs/compressors/#references_12","text":"http://en.wikipedia.org/wiki/Dynamic_range_compression https://ccrma.stanford.edu/~jos/filters/Nonlinear_Filter_Example_Dynamic.html Albert Graef's \"faust2pd\"/examples/synth/compressor_.dsp More features: https://github.com/magnetophon/faustCompressors","title":"References"},{"location":"libs/compressors/#colimiter_1176_r4_mono","text":"A limiter guards against hard-clipping. It can be implemented as a compressor having a high threshold (near the clipping level), fast attack, and high ratio. Since the compression ratio is so high, some knee smoothing is desirable (for softer limiting). This example is intended to get you started using compressors as limiters, so all parameters are hardwired here to nominal values. Ratio: 4 (moderate compression) See compressor_mono() comments for a guide to other choices. Mike Shipley likes this (lowest) setting on the 1176. (Grammy award-winning mixer for Queen, Tom Petty, etc.) Thresh: -6 dB, meaning 4:1 compression begins at amplitude 1/2. Att: 800 MICROseconds (Note: scaled by ratio in the 1176) The 1176 range is said to be 20-800 microseconds. Faster attack gives \"more bite\" (e.g. on vocals), and makes hard-clipping less likely on fast overloads. Rel: 0.5 s (Note: scaled by ratio in the 1176) The 1176 range is said to be 50-1100 ms. The 1176 also has a \"bright, clear eq effect\" (use filters.lib if desired). limiter_1176_R4_mono is a standard Faust function.","title":"(co.)limiter_1176_R4_mono"},{"location":"libs/compressors/#usage_13","text":"_ : limiter_1176_R4_mono : _;","title":"Usage"},{"location":"libs/compressors/#reference","text":"http://en.wikipedia.org/wiki/1176_Peak_Limiter","title":"Reference:"},{"location":"libs/compressors/#colimiter_1176_r4_stereo","text":"A limiter guards against hard-clipping. It can be implemented as a compressor having a high threshold (near the clipping level), fast attack and release, and high ratio. Since the ratio is so high, some knee smoothing is desirable (\"soft limiting\"). This example is intended to get you started using compressor_* as a limiter, so all parameters are hardwired to nominal values here. Ratios: 4 (moderate compression), 8 (severe compression), 12 (mild limiting), or 20 to 1 (hard limiting) Att: 20-800 MICROseconds (Note: scaled by ratio in the 1176) Rel: 50-1100 ms (Note: scaled by ratio in the 1176) Mike Shipley likes 4:1 (Grammy-winning mixer for Queen, Tom Petty, etc.) Faster attack gives \"more bite\" (e.g. on vocals) He hears a bright, clear eq effect as well (not implemented here)","title":"(co.)limiter_1176_R4_stereo"},{"location":"libs/compressors/#usage_14","text":"_,_ : limiter_1176_R4_stereo : _,_;","title":"Usage"},{"location":"libs/compressors/#reference_1","text":"http://en.wikipedia.org/wiki/1176_Peak_Limiter","title":"Reference:"},{"location":"libs/compressors/#colimiter_lad_n","text":"N-channel lookahead limiter inspired by IOhannes Zm\u00f6lnig's post, which is in turn based on the thesis by Peter Falkner \"Entwicklung eines digitalen Stereo-Limiters mit Hilfe des Signalprozessors DSP56001\". This version of the limiter uses a peak-holder with smoothed attack and release based on tau time constant filters. It is also possible to use a time constant that is 2 PI tau by dividing the attack and release times by 2*PI. This time constant allows for the amplitude profile to reach 1 - e^(-2pi) of the final peak after the attack time. The input path can be delayed by the same amount as the attack time to synchronise input and amplitude profile, realising a system that is particularly effective as a colourless (ideally) brickwall limiter. Note that the effectiveness of the ceiling settings are dependent on the other parameters, especially the time constant used for the smoothing filters and the lookahead delay. Similarly, the colourless characteristics are also dependent on attack, hold, and release times. Since fluctuations above ~15 Hz are perceived as timbral effects, [Vassilakis and Kendall 2010] it is reasonable to set the attack time to 1/15 seconds for a smooth amplitude modulation. On the other hand, the hold time can be set to the peak-to-peak period of the expected lowest frequency in the signal, which allows for minimal distortion of the low frequencies. The release time can then provide a perceptually linear and gradual gain increase determined by the user for any specific application. The scaling factor for all the channels is determined by the loudest peak between them all, so that amplitude ratios between the signals are kept.","title":"(co.)limiter_lad_N"},{"location":"libs/compressors/#usage_15","text":"si.bus(N) : limiter_lad_N(N, LD, ceiling, attack, hold, release) : si.bus(N); Where: N is the number of channels, known at compile-time. LD is the lookahead delay in seconds, known at compile-time. ceiling is the linear amplitude output limit. attack is the attack time in seconds. hold is the hold time in seconds. release is the release time in seconds. Example for a stereo limiter: limiter_lad_N(2, .01, 1, .01, .1, 1);","title":"Usage"},{"location":"libs/compressors/#reference_2","text":"http://iem.at/~zmoelnig/publications/limiter/ .","title":"Reference:"},{"location":"libs/compressors/#colimiter_lad_mono","text":"Specialised case of limiter_lad_N: mono limiter.","title":"(co.)limiter_lad_mono"},{"location":"libs/compressors/#usage_16","text":"_ : limiter_lad_mono(LD, ceiling, attack, hold, release) : _; Where: LD is the lookahead delay in seconds, known at compile-time. ceiling is the linear amplitude output limit. attack is the attack time in seconds. hold is the hold time in seconds. release is the release time in seconds.","title":"Usage"},{"location":"libs/compressors/#reference_3","text":"http://iem.at/~zmoelnig/publications/limiter/ .","title":"Reference:"},{"location":"libs/compressors/#colimiter_lad_stereo","text":"Specialised case of limiter_lad_N: stereo limiter.","title":"(co.)limiter_lad_stereo"},{"location":"libs/compressors/#usage_17","text":"_ , _ : limiter_lad_stereo(LD, ceiling, attack, hold, release) : _ , _; Where: LD is the lookahead delay in seconds, known at compile-time. ceiling is the linear amplitude output limit. attack is the attack time in seconds. hold is the hold time in seconds. release is the release time in seconds.","title":"Usage"},{"location":"libs/compressors/#reference_4","text":"http://iem.at/~zmoelnig/publications/limiter/ .","title":"Reference:"},{"location":"libs/compressors/#colimiter_lad_quad","text":"Specialised case of limiter_lad_N: quadraphonic limiter.","title":"(co.)limiter_lad_quad"},{"location":"libs/compressors/#usage_18","text":"si.bus(4) : limiter_lad_quad(LD, ceiling, attack, hold, release) : si.bus(4); Where: LD is the lookahead delay in seconds, known at compile-time. ceiling is the linear amplitude output limit. attack is the attack time in seconds. hold is the hold time in seconds. release is the release time in seconds.","title":"Usage"},{"location":"libs/compressors/#reference_5","text":"http://iem.at/~zmoelnig/publications/limiter/ .","title":"Reference:"},{"location":"libs/compressors/#colimiter_lad_bw","text":"Specialised case of limiter_lad_N and ready-to-use unit-amplitude mono limiting function. This implementation, in particular, uses 2pi*tau time constant filters for attack and release smoothing with synchronised input and gain signals. This function's best application is to be used as a brickwall limiter with the least colouring artefacts while keeping a not-so-slow release curve. Tests have shown that, given a pop song with 60 dB of amplification and a 0-dB-ceiling, the loudest peak recorded was ~0.38 dB.","title":"(co.)limiter_lad_bw"},{"location":"libs/compressors/#usage_19","text":"_ : limiter_lad_bw : _;","title":"Usage"},{"location":"libs/compressors/#reference_6","text":"http://iem.at/~zmoelnig/publications/limiter/ .","title":"Reference:"},{"location":"libs/delays/","text":"delays.lib This library contains a collection of delay functions. Its official prefix is de . Basic Delay Functions (de.)delay Simple d samples delay where n is the maximum delay length as a number of samples. Unlike the @ delay operator, here the delay signal d is explicitly bounded to the interval [0..n]. The consequence is that delay will compile even if the interval of d can't be computed by the compiler. delay is a standard Faust function. Usage _ : delay(n,d) : _ Where: n : the max delay length in samples d : the delay length as a number of samples (integer) (de.)fdelay Simple d samples fractional delay based on 2 interpolated delay lines where n is the maximum delay length as a number of samples. fdelay is a standard Faust function. Usage _ : fdelay(n,d) : _ Where: n : the max delay length in samples d : the delay length as a number of samples (float) (de.)sdelay s(mooth)delay: a mono delay that doesn't click and doesn't transpose when the delay time is changed. Usage _ : sdelay(n,it,dt) : _ Where : n : the max delay length in samples it : interpolation time (in samples) for example 1024 dt : delay time (in samples) Lagrange Interpolation (de.)fdelaylti and (de.)fdelayltv Fractional delay line using Lagrange interpolation. Usage _ : fdelaylt[i|v](order, maxdelay, delay, inputsignal) : _ Where order=1,2,3,... is the order of the Lagrange interpolation polynomial. fdelaylti is most efficient, but designed for constant/slowly-varying delay. fdelayltv is more expensive and more robust when the delay varies rapidly. NOTE: The requested delay should not be less than (order-1)/2 . References https://ccrma.stanford.edu/~jos/pasp/Lagrange_Interpolation.html fixed-delay case variable-delay case Timo I. Laakso et al., \"Splitting the Unit Delay - Tools for Fractional Delay Filter Design\", IEEE Signal Processing Magazine, vol. 13, no. 1, pp. 30-60, Jan 1996. Philippe Depalle and Stephan Tassart, \"Fractional Delay Lines using Lagrange Interpolators\", ICMC Proceedings, pp. 341-343, 1996. (de.)fdelay[n] For convenience, fdelay1 , fdelay2 , fdelay3 , fdelay4 , fdelay5 are also available where n is the order of the interpolation. Thiran Allpass Interpolation Thiran Allpass Interpolation Reference https://ccrma.stanford.edu/~jos/pasp/Thiran_Allpass_Interpolators.html (de.)fdelay[n]a Delay lines interpolated using Thiran allpass interpolation. Usage _ : fdelay[N]a(maxdelay, delay, inputsignal) : _ (exactly like fdelay ) Where: N =1,2,3, or 4 is the order of the Thiran interpolation filter, and the delay argument is at least N - 1/2. Note The interpolated delay should not be less than N - 1/2 . (The allpass delay ranges from N - 1/2 to N + 1/2 .) This constraint can be alleviated by altering the code, but be aware that allpass filters approach zero delay by means of pole-zero cancellations. The delay range [N-1/2 , N+1/2] is not optimal. What is? Delay arguments too small will produce an UNSTABLE allpass! Because allpass interpolation is recursive, it is not as robust as Lagrange interpolation under time-varying conditions (You may hear clicks when changing the delay rapidly.) First-order allpass interpolation, delay d in [0.5,1.5]","title":" delays "},{"location":"libs/delays/#delayslib","text":"This library contains a collection of delay functions. Its official prefix is de .","title":"delays.lib"},{"location":"libs/delays/#basic-delay-functions","text":"","title":"Basic Delay Functions"},{"location":"libs/delays/#dedelay","text":"Simple d samples delay where n is the maximum delay length as a number of samples. Unlike the @ delay operator, here the delay signal d is explicitly bounded to the interval [0..n]. The consequence is that delay will compile even if the interval of d can't be computed by the compiler. delay is a standard Faust function.","title":"(de.)delay"},{"location":"libs/delays/#usage","text":"_ : delay(n,d) : _ Where: n : the max delay length in samples d : the delay length as a number of samples (integer)","title":"Usage"},{"location":"libs/delays/#defdelay","text":"Simple d samples fractional delay based on 2 interpolated delay lines where n is the maximum delay length as a number of samples. fdelay is a standard Faust function.","title":"(de.)fdelay"},{"location":"libs/delays/#usage_1","text":"_ : fdelay(n,d) : _ Where: n : the max delay length in samples d : the delay length as a number of samples (float)","title":"Usage"},{"location":"libs/delays/#desdelay","text":"s(mooth)delay: a mono delay that doesn't click and doesn't transpose when the delay time is changed.","title":"(de.)sdelay"},{"location":"libs/delays/#usage_2","text":"_ : sdelay(n,it,dt) : _ Where : n : the max delay length in samples it : interpolation time (in samples) for example 1024 dt : delay time (in samples)","title":"Usage"},{"location":"libs/delays/#lagrange-interpolation","text":"","title":"Lagrange Interpolation"},{"location":"libs/delays/#defdelaylti-and-defdelayltv","text":"Fractional delay line using Lagrange interpolation.","title":"(de.)fdelaylti and (de.)fdelayltv"},{"location":"libs/delays/#usage_3","text":"_ : fdelaylt[i|v](order, maxdelay, delay, inputsignal) : _ Where order=1,2,3,... is the order of the Lagrange interpolation polynomial. fdelaylti is most efficient, but designed for constant/slowly-varying delay. fdelayltv is more expensive and more robust when the delay varies rapidly. NOTE: The requested delay should not be less than (order-1)/2 .","title":"Usage"},{"location":"libs/delays/#references","text":"https://ccrma.stanford.edu/~jos/pasp/Lagrange_Interpolation.html fixed-delay case variable-delay case Timo I. Laakso et al., \"Splitting the Unit Delay - Tools for Fractional Delay Filter Design\", IEEE Signal Processing Magazine, vol. 13, no. 1, pp. 30-60, Jan 1996. Philippe Depalle and Stephan Tassart, \"Fractional Delay Lines using Lagrange Interpolators\", ICMC Proceedings, pp. 341-343, 1996.","title":"References"},{"location":"libs/delays/#defdelayn","text":"For convenience, fdelay1 , fdelay2 , fdelay3 , fdelay4 , fdelay5 are also available where n is the order of the interpolation.","title":"(de.)fdelay[n]"},{"location":"libs/delays/#thiran-allpass-interpolation","text":"Thiran Allpass Interpolation","title":"Thiran Allpass Interpolation"},{"location":"libs/delays/#reference","text":"https://ccrma.stanford.edu/~jos/pasp/Thiran_Allpass_Interpolators.html","title":"Reference"},{"location":"libs/delays/#defdelayna","text":"Delay lines interpolated using Thiran allpass interpolation.","title":"(de.)fdelay[n]a"},{"location":"libs/delays/#usage_4","text":"_ : fdelay[N]a(maxdelay, delay, inputsignal) : _ (exactly like fdelay ) Where: N =1,2,3, or 4 is the order of the Thiran interpolation filter, and the delay argument is at least N - 1/2.","title":"Usage"},{"location":"libs/delays/#note","text":"The interpolated delay should not be less than N - 1/2 . (The allpass delay ranges from N - 1/2 to N + 1/2 .) This constraint can be alleviated by altering the code, but be aware that allpass filters approach zero delay by means of pole-zero cancellations. The delay range [N-1/2 , N+1/2] is not optimal. What is? Delay arguments too small will produce an UNSTABLE allpass! Because allpass interpolation is recursive, it is not as robust as Lagrange interpolation under time-varying conditions (You may hear clicks when changing the delay rapidly.) First-order allpass interpolation, delay d in [0.5,1.5]","title":"Note"},{"location":"libs/demos/","text":"demos.lib This library contains a set of demo functions based on examples located in the /examples folder. Its official prefix is dm . Analyzers (dm.)mth_octave_spectral_level_demo Demonstrate mth_octave_spectral_level in a standalone GUI. Usage _ : mth_octave_spectral_level_demo(BandsPerOctave); _ : spectral_level_demo : _; 2/3 octave Filters (dm.)parametric_eq_demo A parametric equalizer application. Usage: _ : parametric_eq_demo : _ ; (dm.)spectral_tilt_demo A spectral tilt application. Usage _ : spectral_tilt_demo(N) : _ ; Where: N : filter order (integer) All other parameters interactive (dm.)mth_octave_filterbank_demo and (dm.)filterbank_demo Graphic Equalizer: Each filter-bank output signal routes through a fader. Usage _ : mth_octave_filterbank_demo(M) : _ _ : filterbank_demo : _ Where: N : number of bands per octave Effects (dm.)cubicnl_demo Distortion demo application. Usage: _ : cubicnl_demo : _; (dm.)gate_demo Gate demo application. Usage _,_ : gate_demo : _,_; (dm.)compressor_demo Compressor demo application. Usage _,_ : compressor_demo : _,_; (dm.)moog_vcf_demo Illustrate and compare all three Moog VCF implementations above. Usage _ : moog_vcf_demo : _; (dm.)wah4_demo Wah pedal application. Usage _ : wah4_demo : _; (dm.)crybaby_demo Crybaby effect application. Usage _ : crybaby_demo : _ ; (dm.)flanger_demo Flanger effect application. Usage _,_ : flanger_demo : _,_; (dm.)phaser2_demo Phaser effect demo application. Usage _,_ : phaser2_demo : _,_; (dm.)freeverb_demo Freeverb demo application. Usage _,_ : freeverb_demo : _,_; (dm.)stereo_reverb_tester Handy test inputs for reverberator demos below. Usage _ : stereo_reverb_tester : _ (dm.)fdnrev0_demo A reverb application using fdnrev0 . Usage _,_ : fdnrev0_demo(N,NB,BBSO) : _,_ Where: n : Feedback Delay Network (FDN) order / number of delay lines used = nb : Number of frequency bands / Number of (nearly) independent T60 controls bbso = Butterworth band-split order / order of lowpass/highpass bandsplit (dm.)zita_rev_fdn_demo Reverb demo application based on zita_rev_fdn . Usage si.bus(8) : zita_rev_fdn_demo : si.bus(8) (dm.)zita_light Light version of dm.zita_rev1 with only 2 UI elements. Usage _,_ : zita_light : _,_ (dm.)zita_rev1 Example GUI for zita_rev1_stereo (mostly following the Linux zita-rev1 GUI). Only the dry/wet and output level parameters are \"dezippered\" here. If parameters are to be varied in real time, use smooth(0.999) or the like in the same way. Usage _,_ : zita_rev1 : _,_ Reference http://www.kokkinizita.net/linuxaudio/zitarev1doc/quickguide.html Generators (dm.)sawtooth_demo An application demonstrating the different sawtooth oscillators of Faust. Usage sawtooth_demo : _ (dm.)virtual_analog_oscillator_demo Virtual analog oscillator demo application. Usage virtual_analog_oscillator_demo : _ (dm.)oscrs_demo Simple application demoing filter based oscillators. Usage oscrs_demo : _ (dm.)velvet_noise_demo Listen to velvet_noise! Usage velvet_noise_demo : _ (dm.)latch_demo Illustrate latch operation Usage echo 'import(\"stdfaust.lib\");' > latch_demo.dsp echo 'process = dm.latch_demo;' >> latch_demo.dsp faust2octave latch_demo.dsp Octave:1> plot(faustout); (dm.)envelopes_demo Illustrate various envelopes overlaid, including their gate * 1.1. Usage echo 'import(\"stdfaust.lib\");' > envelopes_demo.dsp echo 'process = dm.envelopes_demo;' >> envelopes_demo.dsp faust2octave envelopes_demo.dsp Octave:1> plot(faustout); (dm.)fft_spectral_level_demo Make a real-time spectrum analyzer using FFT from analyzers.lib Usage echo 'import(\"stdfaust.lib\");' > fft_spectral_level_demo.dsp echo 'process = dm.fft_spectral_level_demo;' >> fft_spectral_level_demo.dsp Mac: faust2caqt fft_spectral_level_demo.dsp open fft_spectral_level_demo.app Linux GTK: faust2jack fft_spectral_level_demo.dsp ./fft_spectral_level_demo Linux QT: faust2jaqt fft_spectral_level_demo.dsp ./fft_spectral_level_demo (dm.)reverse_echo_demo(nChans) Multichannel echo effect with reverse delays Usage echo 'import(\"stdfaust.lib\");' > reverse_echo_demo.dsp echo 'nChans = 3; Any integer > 1 should work here' >> reverse_echo_demo.dsp echo 'process = dm.reverse_echo_demo(nChans);' >> reverse_echo_demo.dsp Mac: faust2caqt reverse_echo_demo.dsp open reverse_echo_demo.app Linux GTK: faust2jack reverse_echo_demo.dsp ./reverse_echo_demo Linux QT: faust2jaqt reverse_echo_demo.dsp ./reverse_echo_demo Etc. (dm.)pospass_demo Use Positive-Pass Filter pospass() to frequency-shift a sine tone. First, a real sinusoid is converted to its analytic-signal form using pospass() to filter out its negative frequency component. Next, it is multiplied by a modulating complex sinusoid at the shifting frequency to create the frequency-shifted result. The real and imaginary parts are output to channels 1 & 2. For a more interesting frequency-shifting example, check the \"Use Mic\" checkbox to replace the input sinusoid by mic input. Note that frequency shifting is not the same as frequency scaling. A frequency-shifted harmonic signal is usually not harmonic. Very small frequency shifts give interesting chirp effects when there is feedback around the frequency shifter. Usage echo 'import(\"stdfaust.lib\");' > pospass_demo.dsp echo 'process = dm.pospass_demo;' >> pospass_demo.dsp Mac: faust2caqt pospass_demo.dsp open pospass_demo.app Linux GTK: faust2jack pospass_demo.dsp ./pospass_demo Linux QT: faust2jaqt pospass_demo.dsp ./pospass_demo Etc. (dm.)exciter Psychoacoustic harmonic exciter, with GUI. Usage _ : exciter : _ References https://secure.aes.org/forum/pubs/ebriefs/?elib=16939 https://www.researchgate.net/publication/258333577_Modeling_the_Harmonic_Exciter (dm.)vocoder_demo Use example of the vocoder function where an impulse train is used as excitation. Usage _ : vocoder_demo : _;","title":" demos "},{"location":"libs/demos/#demoslib","text":"This library contains a set of demo functions based on examples located in the /examples folder. Its official prefix is dm .","title":"demos.lib"},{"location":"libs/demos/#analyzers","text":"","title":"Analyzers"},{"location":"libs/demos/#dmmth_octave_spectral_level_demo","text":"Demonstrate mth_octave_spectral_level in a standalone GUI.","title":"(dm.)mth_octave_spectral_level_demo"},{"location":"libs/demos/#usage","text":"_ : mth_octave_spectral_level_demo(BandsPerOctave); _ : spectral_level_demo : _; 2/3 octave","title":"Usage"},{"location":"libs/demos/#filters","text":"","title":"Filters"},{"location":"libs/demos/#dmparametric_eq_demo","text":"A parametric equalizer application.","title":"(dm.)parametric_eq_demo"},{"location":"libs/demos/#usage_1","text":"_ : parametric_eq_demo : _ ;","title":"Usage:"},{"location":"libs/demos/#dmspectral_tilt_demo","text":"A spectral tilt application.","title":"(dm.)spectral_tilt_demo"},{"location":"libs/demos/#usage_2","text":"_ : spectral_tilt_demo(N) : _ ; Where: N : filter order (integer) All other parameters interactive","title":"Usage"},{"location":"libs/demos/#dmmth_octave_filterbank_demo-and-dmfilterbank_demo","text":"Graphic Equalizer: Each filter-bank output signal routes through a fader.","title":"(dm.)mth_octave_filterbank_demo and (dm.)filterbank_demo"},{"location":"libs/demos/#usage_3","text":"_ : mth_octave_filterbank_demo(M) : _ _ : filterbank_demo : _ Where: N : number of bands per octave","title":"Usage"},{"location":"libs/demos/#effects","text":"","title":"Effects"},{"location":"libs/demos/#dmcubicnl_demo","text":"Distortion demo application.","title":"(dm.)cubicnl_demo"},{"location":"libs/demos/#usage_4","text":"_ : cubicnl_demo : _;","title":"Usage:"},{"location":"libs/demos/#dmgate_demo","text":"Gate demo application.","title":"(dm.)gate_demo"},{"location":"libs/demos/#usage_5","text":"_,_ : gate_demo : _,_;","title":"Usage"},{"location":"libs/demos/#dmcompressor_demo","text":"Compressor demo application.","title":"(dm.)compressor_demo"},{"location":"libs/demos/#usage_6","text":"_,_ : compressor_demo : _,_;","title":"Usage"},{"location":"libs/demos/#dmmoog_vcf_demo","text":"Illustrate and compare all three Moog VCF implementations above.","title":"(dm.)moog_vcf_demo"},{"location":"libs/demos/#usage_7","text":"_ : moog_vcf_demo : _;","title":"Usage"},{"location":"libs/demos/#dmwah4_demo","text":"Wah pedal application.","title":"(dm.)wah4_demo"},{"location":"libs/demos/#usage_8","text":"_ : wah4_demo : _;","title":"Usage"},{"location":"libs/demos/#dmcrybaby_demo","text":"Crybaby effect application.","title":"(dm.)crybaby_demo"},{"location":"libs/demos/#usage_9","text":"_ : crybaby_demo : _ ;","title":"Usage"},{"location":"libs/demos/#dmflanger_demo","text":"Flanger effect application.","title":"(dm.)flanger_demo"},{"location":"libs/demos/#usage_10","text":"_,_ : flanger_demo : _,_;","title":"Usage"},{"location":"libs/demos/#dmphaser2_demo","text":"Phaser effect demo application.","title":"(dm.)phaser2_demo"},{"location":"libs/demos/#usage_11","text":"_,_ : phaser2_demo : _,_;","title":"Usage"},{"location":"libs/demos/#dmfreeverb_demo","text":"Freeverb demo application.","title":"(dm.)freeverb_demo"},{"location":"libs/demos/#usage_12","text":"_,_ : freeverb_demo : _,_;","title":"Usage"},{"location":"libs/demos/#dmstereo_reverb_tester","text":"Handy test inputs for reverberator demos below.","title":"(dm.)stereo_reverb_tester"},{"location":"libs/demos/#usage_13","text":"_ : stereo_reverb_tester : _","title":"Usage"},{"location":"libs/demos/#dmfdnrev0_demo","text":"A reverb application using fdnrev0 .","title":"(dm.)fdnrev0_demo"},{"location":"libs/demos/#usage_14","text":"_,_ : fdnrev0_demo(N,NB,BBSO) : _,_ Where: n : Feedback Delay Network (FDN) order / number of delay lines used = nb : Number of frequency bands / Number of (nearly) independent T60 controls bbso = Butterworth band-split order / order of lowpass/highpass bandsplit","title":"Usage"},{"location":"libs/demos/#dmzita_rev_fdn_demo","text":"Reverb demo application based on zita_rev_fdn .","title":"(dm.)zita_rev_fdn_demo"},{"location":"libs/demos/#usage_15","text":"si.bus(8) : zita_rev_fdn_demo : si.bus(8)","title":"Usage"},{"location":"libs/demos/#dmzita_light","text":"Light version of dm.zita_rev1 with only 2 UI elements.","title":"(dm.)zita_light"},{"location":"libs/demos/#usage_16","text":"_,_ : zita_light : _,_","title":"Usage"},{"location":"libs/demos/#dmzita_rev1","text":"Example GUI for zita_rev1_stereo (mostly following the Linux zita-rev1 GUI). Only the dry/wet and output level parameters are \"dezippered\" here. If parameters are to be varied in real time, use smooth(0.999) or the like in the same way.","title":"(dm.)zita_rev1"},{"location":"libs/demos/#usage_17","text":"_,_ : zita_rev1 : _,_","title":"Usage"},{"location":"libs/demos/#reference","text":"http://www.kokkinizita.net/linuxaudio/zitarev1doc/quickguide.html","title":"Reference"},{"location":"libs/demos/#generators","text":"","title":"Generators"},{"location":"libs/demos/#dmsawtooth_demo","text":"An application demonstrating the different sawtooth oscillators of Faust.","title":"(dm.)sawtooth_demo"},{"location":"libs/demos/#usage_18","text":"sawtooth_demo : _","title":"Usage"},{"location":"libs/demos/#dmvirtual_analog_oscillator_demo","text":"Virtual analog oscillator demo application.","title":"(dm.)virtual_analog_oscillator_demo"},{"location":"libs/demos/#usage_19","text":"virtual_analog_oscillator_demo : _","title":"Usage"},{"location":"libs/demos/#dmoscrs_demo","text":"Simple application demoing filter based oscillators.","title":"(dm.)oscrs_demo"},{"location":"libs/demos/#usage_20","text":"oscrs_demo : _","title":"Usage"},{"location":"libs/demos/#dmvelvet_noise_demo","text":"Listen to velvet_noise!","title":"(dm.)velvet_noise_demo"},{"location":"libs/demos/#usage_21","text":"velvet_noise_demo : _","title":"Usage"},{"location":"libs/demos/#dmlatch_demo","text":"Illustrate latch operation","title":"(dm.)latch_demo"},{"location":"libs/demos/#usage_22","text":"echo 'import(\"stdfaust.lib\");' > latch_demo.dsp echo 'process = dm.latch_demo;' >> latch_demo.dsp faust2octave latch_demo.dsp Octave:1> plot(faustout);","title":"Usage"},{"location":"libs/demos/#dmenvelopes_demo","text":"Illustrate various envelopes overlaid, including their gate * 1.1.","title":"(dm.)envelopes_demo"},{"location":"libs/demos/#usage_23","text":"echo 'import(\"stdfaust.lib\");' > envelopes_demo.dsp echo 'process = dm.envelopes_demo;' >> envelopes_demo.dsp faust2octave envelopes_demo.dsp Octave:1> plot(faustout);","title":"Usage"},{"location":"libs/demos/#dmfft_spectral_level_demo","text":"Make a real-time spectrum analyzer using FFT from analyzers.lib","title":"(dm.)fft_spectral_level_demo"},{"location":"libs/demos/#usage_24","text":"echo 'import(\"stdfaust.lib\");' > fft_spectral_level_demo.dsp echo 'process = dm.fft_spectral_level_demo;' >> fft_spectral_level_demo.dsp Mac: faust2caqt fft_spectral_level_demo.dsp open fft_spectral_level_demo.app Linux GTK: faust2jack fft_spectral_level_demo.dsp ./fft_spectral_level_demo Linux QT: faust2jaqt fft_spectral_level_demo.dsp ./fft_spectral_level_demo","title":"Usage"},{"location":"libs/demos/#dmreverse_echo_demonchans","text":"Multichannel echo effect with reverse delays","title":"(dm.)reverse_echo_demo(nChans)"},{"location":"libs/demos/#usage_25","text":"echo 'import(\"stdfaust.lib\");' > reverse_echo_demo.dsp echo 'nChans = 3; Any integer > 1 should work here' >> reverse_echo_demo.dsp echo 'process = dm.reverse_echo_demo(nChans);' >> reverse_echo_demo.dsp Mac: faust2caqt reverse_echo_demo.dsp open reverse_echo_demo.app Linux GTK: faust2jack reverse_echo_demo.dsp ./reverse_echo_demo Linux QT: faust2jaqt reverse_echo_demo.dsp ./reverse_echo_demo Etc.","title":"Usage"},{"location":"libs/demos/#dmpospass_demo","text":"Use Positive-Pass Filter pospass() to frequency-shift a sine tone. First, a real sinusoid is converted to its analytic-signal form using pospass() to filter out its negative frequency component. Next, it is multiplied by a modulating complex sinusoid at the shifting frequency to create the frequency-shifted result. The real and imaginary parts are output to channels 1 & 2. For a more interesting frequency-shifting example, check the \"Use Mic\" checkbox to replace the input sinusoid by mic input. Note that frequency shifting is not the same as frequency scaling. A frequency-shifted harmonic signal is usually not harmonic. Very small frequency shifts give interesting chirp effects when there is feedback around the frequency shifter.","title":"(dm.)pospass_demo"},{"location":"libs/demos/#usage_26","text":"echo 'import(\"stdfaust.lib\");' > pospass_demo.dsp echo 'process = dm.pospass_demo;' >> pospass_demo.dsp Mac: faust2caqt pospass_demo.dsp open pospass_demo.app Linux GTK: faust2jack pospass_demo.dsp ./pospass_demo Linux QT: faust2jaqt pospass_demo.dsp ./pospass_demo Etc.","title":"Usage"},{"location":"libs/demos/#dmexciter","text":"Psychoacoustic harmonic exciter, with GUI.","title":"(dm.)exciter"},{"location":"libs/demos/#usage_27","text":"_ : exciter : _","title":"Usage"},{"location":"libs/demos/#references","text":"https://secure.aes.org/forum/pubs/ebriefs/?elib=16939 https://www.researchgate.net/publication/258333577_Modeling_the_Harmonic_Exciter","title":"References"},{"location":"libs/demos/#dmvocoder_demo","text":"Use example of the vocoder function where an impulse train is used as excitation.","title":"(dm.)vocoder_demo"},{"location":"libs/demos/#usage_28","text":"_ : vocoder_demo : _;","title":"Usage"},{"location":"libs/dx7/","text":"dx7.lib Yamaha DX7 emulation library. Its official prefix is dx . (dx.)dx7_ampf DX7 amplitude conversion function. 3 versions of this function are available: dx7_amp_bpf : BPF version (same as in the CSOUND toolkit) dx7_amp_func : estimated mathematical equivalent of dx7_amp_bpf dx7_ampf : default (sugar for dx7_amp_func ) Usage: dx7AmpPreset : dx7_ampf_bpf : _ Where: dx7AmpPreset : DX7 amplitude value (0-99) (dx.)dx7_egraterisef DX7 envelope generator rise conversion function. 3 versions of this function are available: dx7_egraterise_bpf : BPF version (same as in the CSOUND toolkit) dx7_egraterise_func : estimated mathematical equivalent of dx7_egraterise_bpf dx7_egraterisef : default (sugar for dx7_egraterise_func ) Usage: dx7envelopeRise : dx7_egraterisef : _ Where: dx7envelopeRise : DX7 envelope rise value (0-99) (dx.)dx7_egraterisepercf DX7 envelope generator percussive rise conversion function. 3 versions of this function are available: dx7_egrateriseperc_bpf : BPF version (same as in the CSOUND toolkit) dx7_egrateriseperc_func : estimated mathematical equivalent of dx7_egrateriseperc_bpf dx7_egraterisepercf : default (sugar for dx7_egrateriseperc_func ) Usage: dx7envelopePercRise : dx7_egraterisepercf : _ Where: dx7envelopePercRise : DX7 envelope percussive rise value (0-99) (dx.)dx7_egratedecayf DX7 envelope generator decay conversion function. 3 versions of this function are available: dx7_egratedecay_bpf : BPF version (same as in the CSOUND toolkit) dx7_egratedecay_func : estimated mathematical equivalent of dx7_egratedecay_bpf dx7_egratedecayf : default (sugar for dx7_egratedecay_func ) Usage: dx7envelopeDecay : dx7_egratedecayf : _ Where: dx7envelopeDecay : DX7 envelope decay value (0-99) (dx.)dx7_egratedecaypercf DX7 envelope generator percussive decay conversion function. 3 versions of this function are available: dx7_egratedecayperc_bpf : BPF version (same as in the CSOUND toolkit) dx7_egratedecayperc_func : estimated mathematical equivalent of dx7_egratedecayperc_bpf dx7_egratedecaypercf : default (sugar for dx7_egratedecayperc_func ) Usage: dx7envelopePercDecay : dx7_egratedecaypercf : _ Where: dx7envelopePercDecay : DX7 envelope decay value (0-99) (dx.)dx7_eglv2peakf DX7 envelope level to peak conversion function. 3 versions of this function are available: dx7_eglv2peak_bpf : BPF version (same as in the CSOUND toolkit) dx7_eglv2peak_func : estimated mathematical equivalent of dx7_eglv2peak_bpf dx7_eglv2peakf : default (sugar for dx7_eglv2peak_func ) Usage: dx7Level : dx7_eglv2peakf : _ Where: dx7Level : DX7 level value (0-99) (dx.)dx7_velsensf DX7 velocity sensitivity conversion function. Usage: dx7Velocity : dx7_velsensf : _ Where: dx7Velocity : DX7 level value (0-8) (dx.)dx7_fdbkscalef DX7 feedback scaling conversion function. Usage: dx7Feedback : dx7_fdbkscalef : _ Where: dx7Feedback : DX7 feedback value (dx.)dx7_op DX7 Operator. Implements a phase-modulable sine wave oscillator connected to a DX7 envelope generator. Usage: dx7_op(freq,phaseMod,outLev,R1,R2,R3,R4,L1,L2,L3,L4,keyVel,rateScale,type,gain,gate) : _ Where: freq : frequency of the oscillator phaseMod : phase deviation (-1 - 1) outLev : preset output level (0-99) R1 : preset envelope rate 1 (0-99) R2 : preset envelope rate 2 (0-99) R3 : preset envelope rate 3 (0-99) R4 : preset envelope rate 4 (0-99) L1 : preset envelope level 1 (0-99) L2 : preset envelope level 2 (0-99) L3 : preset envelope level 3 (0-99) L4 : preset envelope level 4 (0-99) keyVel : preset key velocity sensitivity (0-99) rateScale : preset envelope rate scale type : preset operator type gain : general gain gate : trigger signal (dx.)dx7_algo DX7 algorithms. Implements the 32 DX7 algorithms (a quick Google search should give your more details on this). Each algorithm uses 6 operators. Usage: dx7_algo(algN,egR1,egR2,egR3,egR4,egL1,egL2,egL3,egL4,outLevel,keyVelSens,ampModSens,opMode,opFreq,opDetune,opRateScale,feedback,lfoDelay,lfoDepth,lfoSpeed,freq,gain,gate) : _ Where: algN : algorithm number (0-31, should be an int...) egR1 : preset envelope rates 1 (a list of 6 values between 0-99) egR2 : preset envelope rates 2 (a list of 6 values between 0-99) egR3 : preset envelope rates 3 (a list of 6 values between 0-99) egR4 : preset envelope rates 4 (a list of 6 values between 0-99) egL1 : preset envelope levels 1 (a list of 6 values between 0-99) egL2 : preset envelope levels 2 (a list of 6 values between 0-99) egL3 : preset envelope levels 3 (a list of 6 values between 0-99) egL4 : preset envelope levels 4 (a list of 6 values between 0-99) outLev : preset output levels (a list of 6 values between 0-99) keyVel : preset key velocity sensitivities (a list of 6 values between 0-99) ampModSens : preset amplitude sensitivities (a list of 6 values between 0-99) opMode : preset operator mode (a list of 6 values between 0-1) opFreq : preset operator frequencies (a list of 6 values between 0-99) opDetune : preset operator detuning (a list of 6 values between 0-99) opRateScale : preset operator rate scale (a list of 6 values between 0-99) feedback : preset operator feedback (a list of 6 values between 0-99) lfoDelay : preset LFO delay (a list of 6 values between 0-99) lfoDepth : preset LFO depth (a list of 6 values between 0-99) lfoSpeed : preset LFO speed (a list of 6 values between 0-99) freq : fundamental frequency gain : general gain gate : trigger signal (dx.)dx7_ui Generic DX7 function where all parameters are controllable using UI elements. The master-with-mute branch must be used for this function to work... This function is MIDI-compatible. Usage dx7_ui : _","title":" dx7 "},{"location":"libs/dx7/#dx7lib","text":"Yamaha DX7 emulation library. Its official prefix is dx .","title":"dx7.lib"},{"location":"libs/dx7/#dxdx7_ampf","text":"DX7 amplitude conversion function. 3 versions of this function are available: dx7_amp_bpf : BPF version (same as in the CSOUND toolkit) dx7_amp_func : estimated mathematical equivalent of dx7_amp_bpf dx7_ampf : default (sugar for dx7_amp_func )","title":"(dx.)dx7_ampf"},{"location":"libs/dx7/#usage","text":"dx7AmpPreset : dx7_ampf_bpf : _ Where: dx7AmpPreset : DX7 amplitude value (0-99)","title":"Usage:"},{"location":"libs/dx7/#dxdx7_egraterisef","text":"DX7 envelope generator rise conversion function. 3 versions of this function are available: dx7_egraterise_bpf : BPF version (same as in the CSOUND toolkit) dx7_egraterise_func : estimated mathematical equivalent of dx7_egraterise_bpf dx7_egraterisef : default (sugar for dx7_egraterise_func )","title":"(dx.)dx7_egraterisef"},{"location":"libs/dx7/#usage_1","text":"dx7envelopeRise : dx7_egraterisef : _ Where: dx7envelopeRise : DX7 envelope rise value (0-99)","title":"Usage:"},{"location":"libs/dx7/#dxdx7_egraterisepercf","text":"DX7 envelope generator percussive rise conversion function. 3 versions of this function are available: dx7_egrateriseperc_bpf : BPF version (same as in the CSOUND toolkit) dx7_egrateriseperc_func : estimated mathematical equivalent of dx7_egrateriseperc_bpf dx7_egraterisepercf : default (sugar for dx7_egrateriseperc_func )","title":"(dx.)dx7_egraterisepercf"},{"location":"libs/dx7/#usage_2","text":"dx7envelopePercRise : dx7_egraterisepercf : _ Where: dx7envelopePercRise : DX7 envelope percussive rise value (0-99)","title":"Usage:"},{"location":"libs/dx7/#dxdx7_egratedecayf","text":"DX7 envelope generator decay conversion function. 3 versions of this function are available: dx7_egratedecay_bpf : BPF version (same as in the CSOUND toolkit) dx7_egratedecay_func : estimated mathematical equivalent of dx7_egratedecay_bpf dx7_egratedecayf : default (sugar for dx7_egratedecay_func )","title":"(dx.)dx7_egratedecayf"},{"location":"libs/dx7/#usage_3","text":"dx7envelopeDecay : dx7_egratedecayf : _ Where: dx7envelopeDecay : DX7 envelope decay value (0-99)","title":"Usage:"},{"location":"libs/dx7/#dxdx7_egratedecaypercf","text":"DX7 envelope generator percussive decay conversion function. 3 versions of this function are available: dx7_egratedecayperc_bpf : BPF version (same as in the CSOUND toolkit) dx7_egratedecayperc_func : estimated mathematical equivalent of dx7_egratedecayperc_bpf dx7_egratedecaypercf : default (sugar for dx7_egratedecayperc_func )","title":"(dx.)dx7_egratedecaypercf"},{"location":"libs/dx7/#usage_4","text":"dx7envelopePercDecay : dx7_egratedecaypercf : _ Where: dx7envelopePercDecay : DX7 envelope decay value (0-99)","title":"Usage:"},{"location":"libs/dx7/#dxdx7_eglv2peakf","text":"DX7 envelope level to peak conversion function. 3 versions of this function are available: dx7_eglv2peak_bpf : BPF version (same as in the CSOUND toolkit) dx7_eglv2peak_func : estimated mathematical equivalent of dx7_eglv2peak_bpf dx7_eglv2peakf : default (sugar for dx7_eglv2peak_func )","title":"(dx.)dx7_eglv2peakf"},{"location":"libs/dx7/#usage_5","text":"dx7Level : dx7_eglv2peakf : _ Where: dx7Level : DX7 level value (0-99)","title":"Usage:"},{"location":"libs/dx7/#dxdx7_velsensf","text":"DX7 velocity sensitivity conversion function.","title":"(dx.)dx7_velsensf"},{"location":"libs/dx7/#usage_6","text":"dx7Velocity : dx7_velsensf : _ Where: dx7Velocity : DX7 level value (0-8)","title":"Usage:"},{"location":"libs/dx7/#dxdx7_fdbkscalef","text":"DX7 feedback scaling conversion function.","title":"(dx.)dx7_fdbkscalef"},{"location":"libs/dx7/#usage_7","text":"dx7Feedback : dx7_fdbkscalef : _ Where: dx7Feedback : DX7 feedback value","title":"Usage:"},{"location":"libs/dx7/#dxdx7_op","text":"DX7 Operator. Implements a phase-modulable sine wave oscillator connected to a DX7 envelope generator.","title":"(dx.)dx7_op"},{"location":"libs/dx7/#usage_8","text":"dx7_op(freq,phaseMod,outLev,R1,R2,R3,R4,L1,L2,L3,L4,keyVel,rateScale,type,gain,gate) : _ Where: freq : frequency of the oscillator phaseMod : phase deviation (-1 - 1) outLev : preset output level (0-99) R1 : preset envelope rate 1 (0-99) R2 : preset envelope rate 2 (0-99) R3 : preset envelope rate 3 (0-99) R4 : preset envelope rate 4 (0-99) L1 : preset envelope level 1 (0-99) L2 : preset envelope level 2 (0-99) L3 : preset envelope level 3 (0-99) L4 : preset envelope level 4 (0-99) keyVel : preset key velocity sensitivity (0-99) rateScale : preset envelope rate scale type : preset operator type gain : general gain gate : trigger signal","title":"Usage:"},{"location":"libs/dx7/#dxdx7_algo","text":"DX7 algorithms. Implements the 32 DX7 algorithms (a quick Google search should give your more details on this). Each algorithm uses 6 operators.","title":"(dx.)dx7_algo"},{"location":"libs/dx7/#usage_9","text":"dx7_algo(algN,egR1,egR2,egR3,egR4,egL1,egL2,egL3,egL4,outLevel,keyVelSens,ampModSens,opMode,opFreq,opDetune,opRateScale,feedback,lfoDelay,lfoDepth,lfoSpeed,freq,gain,gate) : _ Where: algN : algorithm number (0-31, should be an int...) egR1 : preset envelope rates 1 (a list of 6 values between 0-99) egR2 : preset envelope rates 2 (a list of 6 values between 0-99) egR3 : preset envelope rates 3 (a list of 6 values between 0-99) egR4 : preset envelope rates 4 (a list of 6 values between 0-99) egL1 : preset envelope levels 1 (a list of 6 values between 0-99) egL2 : preset envelope levels 2 (a list of 6 values between 0-99) egL3 : preset envelope levels 3 (a list of 6 values between 0-99) egL4 : preset envelope levels 4 (a list of 6 values between 0-99) outLev : preset output levels (a list of 6 values between 0-99) keyVel : preset key velocity sensitivities (a list of 6 values between 0-99) ampModSens : preset amplitude sensitivities (a list of 6 values between 0-99) opMode : preset operator mode (a list of 6 values between 0-1) opFreq : preset operator frequencies (a list of 6 values between 0-99) opDetune : preset operator detuning (a list of 6 values between 0-99) opRateScale : preset operator rate scale (a list of 6 values between 0-99) feedback : preset operator feedback (a list of 6 values between 0-99) lfoDelay : preset LFO delay (a list of 6 values between 0-99) lfoDepth : preset LFO depth (a list of 6 values between 0-99) lfoSpeed : preset LFO speed (a list of 6 values between 0-99) freq : fundamental frequency gain : general gain gate : trigger signal","title":"Usage:"},{"location":"libs/dx7/#dxdx7_ui","text":"Generic DX7 function where all parameters are controllable using UI elements. The master-with-mute branch must be used for this function to work... This function is MIDI-compatible.","title":"(dx.)dx7_ui"},{"location":"libs/dx7/#usage_10","text":"dx7_ui : _","title":"Usage"},{"location":"libs/envelopes/","text":"envelopes.lib This library contains a collection of envelope generators. Its official prefix is en . Functions Reference (en.)smoothEnvelope An envelope with an exponential attack and release. smoothEnvelope is a standard Faust function. Usage smoothEnvelope(ar,t) : _ ar : attack and release duration (s) t : trigger signal (attack is triggered when t>0 , release is triggered when t=0 ) (en.)ar AR (Attack, Release) envelope generator (useful to create percussion envelopes). ar is a standard Faust function. Usage ar(at,rt,t) : _ Where: at : attack (sec) rt : release (sec) t : trigger signal (attack is triggered when t>0 , release is triggered when t=0 ) (en.)arfe ARFE (Attack and Release-to-Final-value Exponentially) envelope generator. Approximately equal to smoothEnvelope(Attack/6.91) when Attack == Release. Usage arfe(a,r,f,t) : _ Where: a , r : attack (sec), release (sec) f : final value to approach upon release (such as 0) t : trigger signal (attack is triggered when t>0 , release is triggered when t=0 ) (en.)are ARE (Attack, Release) envelope generator with Exponential segments. Approximately equal to smoothEnvelope(Attack/6.91) when Attack == Release. Usage are(a,r,t) : _ Where: a : attack (sec) r : release (sec) t : trigger signal (attack is triggered when t>0 , release is triggered when t=0 ) (en.)asr ASR (Attack, Sustain, Release) envelope generator. asr is a standard Faust function. Usage asr(at,sl,rt,t) : _ Where: at : attack (sec) sl : sustain level (between 0..1) r : release (sec) t : trigger signal (attack is triggered when t>0 , release is triggered when t=0 ) (en.)adsr ADSR (Attack, Decay, Sustain, Release) envelope generator. adsr is a standard Faust function. Usage adsr(at,dt,sl,rt,gate) : _ Where: at : attack time (sec) dt : decay time (sec) sl : sustain level (between 0..1) rt : release time (sec) gate : trigger signal (attack is triggered when gate>0 , release is triggered when gate=0 ) (en.)adsre ADSRE (Attack, Decay, Sustain, Release) envelope generator with Exponential segments. Usage adsre(a,d,s,r,g) : _ Where: a : attack (sec) d : decay (sec) s : sustain (fraction of t : 0-1) r : release (sec) g : gate signal: attack is triggered when g goes from zero to positive, release is triggered when g returns to 0 (en.)asre ASRE (Attack, Sustain, Release) envelope generator with Exponential segments. Usage asre(a,s,r,g) : _ Where: a : attack (sec) s : sustain (fraction of t : 0-1) r : release (sec) t : trigger signal (attack is triggered when t>0 , release is triggered when t=0 ) (en.)dx7envelope DX7 operator envelope generator with 4 independent rates and levels. It is essentially a 4 points BPF. Usage dx7_envelope(R1,R2,R3,R4,L1,L2,L3,L4,t) : _ Where: RN : rates in seconds LN : levels (0-1) t : trigger signal","title":" envelopes "},{"location":"libs/envelopes/#envelopeslib","text":"This library contains a collection of envelope generators. Its official prefix is en .","title":"envelopes.lib"},{"location":"libs/envelopes/#functions-reference","text":"","title":"Functions Reference"},{"location":"libs/envelopes/#ensmoothenvelope","text":"An envelope with an exponential attack and release. smoothEnvelope is a standard Faust function.","title":"(en.)smoothEnvelope"},{"location":"libs/envelopes/#usage","text":"smoothEnvelope(ar,t) : _ ar : attack and release duration (s) t : trigger signal (attack is triggered when t>0 , release is triggered when t=0 )","title":"Usage"},{"location":"libs/envelopes/#enar","text":"AR (Attack, Release) envelope generator (useful to create percussion envelopes). ar is a standard Faust function.","title":"(en.)ar"},{"location":"libs/envelopes/#usage_1","text":"ar(at,rt,t) : _ Where: at : attack (sec) rt : release (sec) t : trigger signal (attack is triggered when t>0 , release is triggered when t=0 )","title":"Usage"},{"location":"libs/envelopes/#enarfe","text":"ARFE (Attack and Release-to-Final-value Exponentially) envelope generator. Approximately equal to smoothEnvelope(Attack/6.91) when Attack == Release.","title":"(en.)arfe"},{"location":"libs/envelopes/#usage_2","text":"arfe(a,r,f,t) : _ Where: a , r : attack (sec), release (sec) f : final value to approach upon release (such as 0) t : trigger signal (attack is triggered when t>0 , release is triggered when t=0 )","title":"Usage"},{"location":"libs/envelopes/#enare","text":"ARE (Attack, Release) envelope generator with Exponential segments. Approximately equal to smoothEnvelope(Attack/6.91) when Attack == Release.","title":"(en.)are"},{"location":"libs/envelopes/#usage_3","text":"are(a,r,t) : _ Where: a : attack (sec) r : release (sec) t : trigger signal (attack is triggered when t>0 , release is triggered when t=0 )","title":"Usage"},{"location":"libs/envelopes/#enasr","text":"ASR (Attack, Sustain, Release) envelope generator. asr is a standard Faust function.","title":"(en.)asr"},{"location":"libs/envelopes/#usage_4","text":"asr(at,sl,rt,t) : _ Where: at : attack (sec) sl : sustain level (between 0..1) r : release (sec) t : trigger signal (attack is triggered when t>0 , release is triggered when t=0 )","title":"Usage"},{"location":"libs/envelopes/#enadsr","text":"ADSR (Attack, Decay, Sustain, Release) envelope generator. adsr is a standard Faust function.","title":"(en.)adsr"},{"location":"libs/envelopes/#usage_5","text":"adsr(at,dt,sl,rt,gate) : _ Where: at : attack time (sec) dt : decay time (sec) sl : sustain level (between 0..1) rt : release time (sec) gate : trigger signal (attack is triggered when gate>0 , release is triggered when gate=0 )","title":"Usage"},{"location":"libs/envelopes/#enadsre","text":"ADSRE (Attack, Decay, Sustain, Release) envelope generator with Exponential segments.","title":"(en.)adsre"},{"location":"libs/envelopes/#usage_6","text":"adsre(a,d,s,r,g) : _ Where: a : attack (sec) d : decay (sec) s : sustain (fraction of t : 0-1) r : release (sec) g : gate signal: attack is triggered when g goes from zero to positive, release is triggered when g returns to 0","title":"Usage"},{"location":"libs/envelopes/#enasre","text":"ASRE (Attack, Sustain, Release) envelope generator with Exponential segments.","title":"(en.)asre"},{"location":"libs/envelopes/#usage_7","text":"asre(a,s,r,g) : _ Where: a : attack (sec) s : sustain (fraction of t : 0-1) r : release (sec) t : trigger signal (attack is triggered when t>0 , release is triggered when t=0 )","title":"Usage"},{"location":"libs/envelopes/#endx7envelope","text":"DX7 operator envelope generator with 4 independent rates and levels. It is essentially a 4 points BPF.","title":"(en.)dx7envelope"},{"location":"libs/envelopes/#usage_8","text":"dx7_envelope(R1,R2,R3,R4,L1,L2,L3,L4,t) : _ Where: RN : rates in seconds LN : levels (0-1) t : trigger signal","title":"Usage"},{"location":"libs/fds/","text":"fds.lib This library allows to build linear, explicit finite difference schemes physical models in 1 or 2 dimensions using an approach based on the cellular automata formalism. In order to use the library, one needs to discretize the linear partial differential equation of the desired system both at boundaries and in-between them, thus obtaining a set of explicit recursion relations. Each one of these will provide, for each spatial point the scalar coefficients to be multiplied by the states of the current and past neighbour points. Coefficients need to be stacked in parallel in order to form a coefficients matrix for each point in the mesh. It is necessary to provide one matrix for coefficients matrices are defined, they need to be placed in parallel and ordered following the desired mesh structure (i.e., coefficients for the top left boundaries will come first, while bottom right boundaries will come last), to form a coefficients scheme , which can be used with the library functions. Sources Here are listed some works on finite difference schemes and cellular automata thet were the basis for the implementation of this library S. Bilbao, Numerical Sound Synthesis.Chichester,UK: John Wiley Sons, Ltd, 2009 P. Narbel, \"Qualitative and quantitative cellular automata from differential equations,\" Lecture Notes inComputer Science, vol. 4173, pp. 112\u2013121, 10 2006 X.-S. Yang and Y. Young,Cellular Automata, PDEs, and Pattern Formation. Chapman & Hall/CRC, 092005, ch. 18, pp. 271\u2013282. Model Construction Once the coefficients scheme is defined, the user can simply call one of these functions to obtain a fully working physical model. They expect to receive a force input signal for each mesh point and output the state of each point. Interpolation operators can be used to drive external forces to the desired points, and to get the signal only from a certain area of the mesh. (fds.)model1D This function can be used to obtain a physical model in 1 dimension. Takes a force input signal for each point and outputs the state of each point. Usage si.bus(points) : model1D(points,R,T,scheme) : si.bus(points) Where: points : size of the mesh in points R : neighbourhood radius, indicates how many side points are needed (i.e. if R=1 the mesh depends on one point on the left and one on the right) T : time coefficient, indicates how much steps back in time are needed (i. e. if T=1 the maximum delay needed for a neighbour state is 1 sample) scheme : coefficients scheme (fds.)model2D This function can be used to obtain a physical model in 2 dimension. Takes a force input signal for each point and outputs the state of each point. IMPORTANT: 2D models with more than 30x20 points might crash the c++ compiler. 2D models need to be compiled with the command line compiler, the online one presents some issues. Usage si.bus(pointsX*pointsY) : model2D(pointsX,pointsY,R,T,scheme) : si.bus(pointsX*pointsY) Where: pointsX : horizontal size of the mesh in points pointsY : vertical size of the mesh in points R : neighbourhood radius, indicates how many side points are needed (i.e. if R=1 the mesh depends on one point on the left and one on the right) T : time coefficient, indicates how much steps back in time are needed (i. e. if T=1 the maximum delay needed for a neighbour state is 1 sample) scheme : coefficients scheme Interpolation Interpolation functions can be used to drive the input signals to the correct mesh points, or to get the output signal from the desired points. All the interpolation functions allow to change the input/output points at run time. In general, all these functions get in input a number of connections, and output the same number of connections, where each signal is multiplied by zero except the ones specified by the arguments. (fds.)stairsInterp1D Stairs interpolator in 1 dimension. Takes a number of signals and outputs the same number of signals, where each one is multiplied by zero except the one specified by the argument. This can vary at run time (i.e. a slider), but must be an integer. Usage si.bus(points) : stairsInterp1D(points,point) : si.bus(points) Where: points : total number of points in the mesh point : number of the desired nonzero signal (fds.)stairsInterp2D Stairs interpolator in 2 dimensions. Similar to the 1-D version. Usage si.bus(pointsX*pointsY) : stairsInterp2D(pointsX,pointsY,pointX,pointY) : si.bus(pointsX*pointsY) Where: pointsX : total number of points in the X direction pointsY : total number of points in the Y direction pointX : horizontal index of the desired nonzero signal pointY : vertical index of the desired nonzero signal (fds.)linInterp1D Linear interpolator in 1 dimension. Takes a number of signals and outputs the same number of signals, where each one is multiplied by zero except two signals around a floating point index. This is essentially a Faust implementation of the $J(x_i)$ operator, not scaled by the spatial step. (see Stefan Bilbao's book, Numerical Sound Synthesis). The index can vary at run time. Usage si.bus(points) : linInterp1D(points,point) : si.bus(points) Where: points : total number of points in the mesh point : floating point index (fds.)linInterp2D Linear interpolator in 2 dimensions. Similar to the 1 D version. Usage si.bus(pointsX*pointsY) : linInterp2D(pointsX,pointsY,pointX,pointY) : si.bus(pointsX*pointsY) Where: pointsX : total number of points in the X direction pointsY : total number of points in the Y direction pointX : horizontal float index pointY : vertical float index (fds.)stairsInterp1DOut Stairs interpolator in 1 dimension. Similar to stairsInterp1D, except it outputs only the desired signal. Usage si.bus(points) : stairsInterp1DOut(points,point) : _ Where: points : total number of points in the mesh point : number of the desired nonzero signal (fds.)stairsInterp2DOut Stairs interpolator in 2 dimensions which outputs only one signal. Usage si.bus(pointsX*pointsY) : stairsInterp2DOut(pointsX,pointsY,pointX,pointY) : _ Where: pointsX : total number of points in the X direction pointsY : total number of points in the Y direction pointX : horizontal index of the desired nonzero signal pointY : vertical index of the desired nonzero signal (fds.)linInterp1DOut Linear interpolator in 1 dimension. Similar to stairsInterp1D, except it sums each output signal and provides only one output value. Usage si.bus(points) : linInterp1DOut(points,point) : _ Where: points : total number of points in the mesh point : floating point index (fds.)stairsInterp2DOut Linear interpolator in 2 dimensions which outputs only one signal. Usage si.bus(pointsX*pointsY) : linInterp2DOut(pointsX,pointsY,pointX,pointY) : _ Where: pointsX : total number of points in the X direction pointsY : total number of points in the Y direction pointX : horizontal float index pointY : vertical float index Routing The routing functions are used internally by the model building functions, but can also be taken separately. These functions route the forces, the coefficients scheme and the neighbours\u2019 signals into the correct scheme points and take as input, in this order: the coefficients block, the feedback signals and the forces. In output they provide, in order, for each scheme point: the force signal, the coefficient matrices and the neighbours\u2019 signals. These functions are based on the Faust route primitive. (fds.)route1D Routing function for 1 dimensional schemes. Usage si.bus((2*R+1)*(T+1)*points),si.bus(points*2) : route1D(points, R, T) : si.bus((1 + ((2*R+1)*(T+1)) + (2*R+1))*points) Where: points : total number of points in the mesh R : neighbourhood radius T : time coefficient (fds.)route2D Routing function for 2 dimensional schemes. Usage si.bus((2*R+1)^2*(T+1)*pointsX*pointsY),si.bus(pointsX*pointsY*2) : route2D(pointsX, pointsY, R, T) : si.bus((1 + ((2*R+1)^2*(T+1)) + (2*R+1)^2)*pointsX*pointsY) Where: pointsX : total number of points in the X direction pointsY : total number of points in the Y direction R : neighbourhood radius T : time coefficient Scheme Operations The scheme operation functions are used internally by the model building functions but can also be taken separately. The schemePoint function is where the update equation is actually calculated. The buildScheme functions are used to stack in parallel several schemePoint blocks, according to the choosed mesh size. (fds.)schemePoint This function calculates the next state for each mesh point, in order to form a scheme, several of these blocks need to be stacked in parallel. This function takes in input, in order, the force, the coefficient matrices and the neighbours\u2019 signals and outputs the next point state. Usage _,si.bus((2*R+1)^D*(T+1)),si.bus((2*R+1)^D) : schemePoint(R,T,D) : _ Where: R : neighbourhood radius T : time coefficient D : scheme spatial dimensions (i.e. 1 if 1-D, 2 if 2-D) (fds.)buildScheme1D This function is used to stack in parallel several schemePoint functions in 1 dimension, according to the number of points. Usage si.bus((1 + ((2*R+1)*(T+1)) + (2*R+1))*points) : buildScheme1D(points,R,T) : si.bus(points) Where: points : total number of points in the mesh R : neighbourhood radius T : time coefficient (fds.)buildScheme2D This function is used to stack in parallel several schemePoint functions in 2 dimensions, according to the number of points in the X and Y directions. Usage si.bus((1 + ((2*R+1)^2*(T+1)) + (2*R+1)^2)*pointsX*pointsY) : buildScheme2D(pointsX,pointsY,R,T) : si.bus(pointsX*pointsY) Where: pointsX : total number of points in the X direction pointsY : total number of points in the Y direction R : neighbourhood radius T : time coefficient Interaction Models Here are defined two physically based interaction algorithms: a hammer and a bow. These functions need to be coupled to the mesh pde, in the point where the interaction happens: to do so, the mesh output signals can be fed back and driven into the force block using the interpolation operators. The latters can be also used to drive the single force output signal to the correct scheme points. (fds.)hammer Implementation of a nonlinear collision model. The hammer is essentially a finite difference scheme of a linear damped oscillator, which is coupled with the mesh through the collision model (see Stefan Bilbao's book, Numerical Sound Synthesis). Usage _ :hammer(coeff,omega0Sqr,sigma0,kH,alpha,k,offset,fIn) : _ Where: coeff : output force scaling coefficient omega0Sqr : squared angular frequency of the hammer oscillator sigma0 : damping coefficient of the hammer oscillator kH : hammer stiffness coefficient alpha : nonlinearity parameter k : time sampling step (the same as for the mesh) offset : distance between the string and the hammer at rest in meters fIn : hammer excitation signal (i.e. a button) (fds.)bow Implementation of a nonlinear friction based interaction model that induces Helmholtz motion. (see Stefan Bilbao's book, Numerical Sound Synthesis). Usage _ :bow(coeff,alpha,k,vb) : _ Where: coeff : output force scaling coefficient alpha : nonlinearity parameter k : time sampling step (the same as for the mesh) vb : bow velocity [m/s]","title":" fds "},{"location":"libs/fds/#fdslib","text":"This library allows to build linear, explicit finite difference schemes physical models in 1 or 2 dimensions using an approach based on the cellular automata formalism. In order to use the library, one needs to discretize the linear partial differential equation of the desired system both at boundaries and in-between them, thus obtaining a set of explicit recursion relations. Each one of these will provide, for each spatial point the scalar coefficients to be multiplied by the states of the current and past neighbour points. Coefficients need to be stacked in parallel in order to form a coefficients matrix for each point in the mesh. It is necessary to provide one matrix for coefficients matrices are defined, they need to be placed in parallel and ordered following the desired mesh structure (i.e., coefficients for the top left boundaries will come first, while bottom right boundaries will come last), to form a coefficients scheme , which can be used with the library functions.","title":"fds.lib"},{"location":"libs/fds/#sources","text":"Here are listed some works on finite difference schemes and cellular automata thet were the basis for the implementation of this library S. Bilbao, Numerical Sound Synthesis.Chichester,UK: John Wiley Sons, Ltd, 2009 P. Narbel, \"Qualitative and quantitative cellular automata from differential equations,\" Lecture Notes inComputer Science, vol. 4173, pp. 112\u2013121, 10 2006 X.-S. Yang and Y. Young,Cellular Automata, PDEs, and Pattern Formation. Chapman & Hall/CRC, 092005, ch. 18, pp. 271\u2013282.","title":"Sources"},{"location":"libs/fds/#model-construction","text":"Once the coefficients scheme is defined, the user can simply call one of these functions to obtain a fully working physical model. They expect to receive a force input signal for each mesh point and output the state of each point. Interpolation operators can be used to drive external forces to the desired points, and to get the signal only from a certain area of the mesh.","title":"Model Construction"},{"location":"libs/fds/#fdsmodel1d","text":"This function can be used to obtain a physical model in 1 dimension. Takes a force input signal for each point and outputs the state of each point.","title":"(fds.)model1D"},{"location":"libs/fds/#usage","text":"si.bus(points) : model1D(points,R,T,scheme) : si.bus(points) Where: points : size of the mesh in points R : neighbourhood radius, indicates how many side points are needed (i.e. if R=1 the mesh depends on one point on the left and one on the right) T : time coefficient, indicates how much steps back in time are needed (i. e. if T=1 the maximum delay needed for a neighbour state is 1 sample) scheme : coefficients scheme","title":"Usage"},{"location":"libs/fds/#fdsmodel2d","text":"This function can be used to obtain a physical model in 2 dimension. Takes a force input signal for each point and outputs the state of each point. IMPORTANT: 2D models with more than 30x20 points might crash the c++ compiler. 2D models need to be compiled with the command line compiler, the online one presents some issues.","title":"(fds.)model2D"},{"location":"libs/fds/#usage_1","text":"si.bus(pointsX*pointsY) : model2D(pointsX,pointsY,R,T,scheme) : si.bus(pointsX*pointsY) Where: pointsX : horizontal size of the mesh in points pointsY : vertical size of the mesh in points R : neighbourhood radius, indicates how many side points are needed (i.e. if R=1 the mesh depends on one point on the left and one on the right) T : time coefficient, indicates how much steps back in time are needed (i. e. if T=1 the maximum delay needed for a neighbour state is 1 sample) scheme : coefficients scheme","title":"Usage"},{"location":"libs/fds/#interpolation","text":"Interpolation functions can be used to drive the input signals to the correct mesh points, or to get the output signal from the desired points. All the interpolation functions allow to change the input/output points at run time. In general, all these functions get in input a number of connections, and output the same number of connections, where each signal is multiplied by zero except the ones specified by the arguments.","title":"Interpolation"},{"location":"libs/fds/#fdsstairsinterp1d","text":"Stairs interpolator in 1 dimension. Takes a number of signals and outputs the same number of signals, where each one is multiplied by zero except the one specified by the argument. This can vary at run time (i.e. a slider), but must be an integer.","title":"(fds.)stairsInterp1D"},{"location":"libs/fds/#usage_2","text":"si.bus(points) : stairsInterp1D(points,point) : si.bus(points) Where: points : total number of points in the mesh point : number of the desired nonzero signal","title":"Usage"},{"location":"libs/fds/#fdsstairsinterp2d","text":"Stairs interpolator in 2 dimensions. Similar to the 1-D version.","title":"(fds.)stairsInterp2D"},{"location":"libs/fds/#usage_3","text":"si.bus(pointsX*pointsY) : stairsInterp2D(pointsX,pointsY,pointX,pointY) : si.bus(pointsX*pointsY) Where: pointsX : total number of points in the X direction pointsY : total number of points in the Y direction pointX : horizontal index of the desired nonzero signal pointY : vertical index of the desired nonzero signal","title":"Usage"},{"location":"libs/fds/#fdslininterp1d","text":"Linear interpolator in 1 dimension. Takes a number of signals and outputs the same number of signals, where each one is multiplied by zero except two signals around a floating point index. This is essentially a Faust implementation of the $J(x_i)$ operator, not scaled by the spatial step. (see Stefan Bilbao's book, Numerical Sound Synthesis). The index can vary at run time.","title":"(fds.)linInterp1D"},{"location":"libs/fds/#usage_4","text":"si.bus(points) : linInterp1D(points,point) : si.bus(points) Where: points : total number of points in the mesh point : floating point index","title":"Usage"},{"location":"libs/fds/#fdslininterp2d","text":"Linear interpolator in 2 dimensions. Similar to the 1 D version.","title":"(fds.)linInterp2D"},{"location":"libs/fds/#usage_5","text":"si.bus(pointsX*pointsY) : linInterp2D(pointsX,pointsY,pointX,pointY) : si.bus(pointsX*pointsY) Where: pointsX : total number of points in the X direction pointsY : total number of points in the Y direction pointX : horizontal float index pointY : vertical float index","title":"Usage"},{"location":"libs/fds/#fdsstairsinterp1dout","text":"Stairs interpolator in 1 dimension. Similar to stairsInterp1D, except it outputs only the desired signal.","title":"(fds.)stairsInterp1DOut"},{"location":"libs/fds/#usage_6","text":"si.bus(points) : stairsInterp1DOut(points,point) : _ Where: points : total number of points in the mesh point : number of the desired nonzero signal","title":"Usage"},{"location":"libs/fds/#fdsstairsinterp2dout","text":"Stairs interpolator in 2 dimensions which outputs only one signal.","title":"(fds.)stairsInterp2DOut"},{"location":"libs/fds/#usage_7","text":"si.bus(pointsX*pointsY) : stairsInterp2DOut(pointsX,pointsY,pointX,pointY) : _ Where: pointsX : total number of points in the X direction pointsY : total number of points in the Y direction pointX : horizontal index of the desired nonzero signal pointY : vertical index of the desired nonzero signal","title":"Usage"},{"location":"libs/fds/#fdslininterp1dout","text":"Linear interpolator in 1 dimension. Similar to stairsInterp1D, except it sums each output signal and provides only one output value.","title":"(fds.)linInterp1DOut"},{"location":"libs/fds/#usage_8","text":"si.bus(points) : linInterp1DOut(points,point) : _ Where: points : total number of points in the mesh point : floating point index","title":"Usage"},{"location":"libs/fds/#fdsstairsinterp2dout_1","text":"Linear interpolator in 2 dimensions which outputs only one signal.","title":"(fds.)stairsInterp2DOut"},{"location":"libs/fds/#usage_9","text":"si.bus(pointsX*pointsY) : linInterp2DOut(pointsX,pointsY,pointX,pointY) : _ Where: pointsX : total number of points in the X direction pointsY : total number of points in the Y direction pointX : horizontal float index pointY : vertical float index","title":"Usage"},{"location":"libs/fds/#routing","text":"The routing functions are used internally by the model building functions, but can also be taken separately. These functions route the forces, the coefficients scheme and the neighbours\u2019 signals into the correct scheme points and take as input, in this order: the coefficients block, the feedback signals and the forces. In output they provide, in order, for each scheme point: the force signal, the coefficient matrices and the neighbours\u2019 signals. These functions are based on the Faust route primitive.","title":"Routing"},{"location":"libs/fds/#fdsroute1d","text":"Routing function for 1 dimensional schemes.","title":"(fds.)route1D"},{"location":"libs/fds/#usage_10","text":"si.bus((2*R+1)*(T+1)*points),si.bus(points*2) : route1D(points, R, T) : si.bus((1 + ((2*R+1)*(T+1)) + (2*R+1))*points) Where: points : total number of points in the mesh R : neighbourhood radius T : time coefficient","title":"Usage"},{"location":"libs/fds/#fdsroute2d","text":"Routing function for 2 dimensional schemes.","title":"(fds.)route2D"},{"location":"libs/fds/#usage_11","text":"si.bus((2*R+1)^2*(T+1)*pointsX*pointsY),si.bus(pointsX*pointsY*2) : route2D(pointsX, pointsY, R, T) : si.bus((1 + ((2*R+1)^2*(T+1)) + (2*R+1)^2)*pointsX*pointsY) Where: pointsX : total number of points in the X direction pointsY : total number of points in the Y direction R : neighbourhood radius T : time coefficient","title":"Usage"},{"location":"libs/fds/#scheme-operations","text":"The scheme operation functions are used internally by the model building functions but can also be taken separately. The schemePoint function is where the update equation is actually calculated. The buildScheme functions are used to stack in parallel several schemePoint blocks, according to the choosed mesh size.","title":"Scheme Operations"},{"location":"libs/fds/#fdsschemepoint","text":"This function calculates the next state for each mesh point, in order to form a scheme, several of these blocks need to be stacked in parallel. This function takes in input, in order, the force, the coefficient matrices and the neighbours\u2019 signals and outputs the next point state.","title":"(fds.)schemePoint"},{"location":"libs/fds/#usage_12","text":"_,si.bus((2*R+1)^D*(T+1)),si.bus((2*R+1)^D) : schemePoint(R,T,D) : _ Where: R : neighbourhood radius T : time coefficient D : scheme spatial dimensions (i.e. 1 if 1-D, 2 if 2-D)","title":"Usage"},{"location":"libs/fds/#fdsbuildscheme1d","text":"This function is used to stack in parallel several schemePoint functions in 1 dimension, according to the number of points.","title":"(fds.)buildScheme1D"},{"location":"libs/fds/#usage_13","text":"si.bus((1 + ((2*R+1)*(T+1)) + (2*R+1))*points) : buildScheme1D(points,R,T) : si.bus(points) Where: points : total number of points in the mesh R : neighbourhood radius T : time coefficient","title":"Usage"},{"location":"libs/fds/#fdsbuildscheme2d","text":"This function is used to stack in parallel several schemePoint functions in 2 dimensions, according to the number of points in the X and Y directions.","title":"(fds.)buildScheme2D"},{"location":"libs/fds/#usage_14","text":"si.bus((1 + ((2*R+1)^2*(T+1)) + (2*R+1)^2)*pointsX*pointsY) : buildScheme2D(pointsX,pointsY,R,T) : si.bus(pointsX*pointsY) Where: pointsX : total number of points in the X direction pointsY : total number of points in the Y direction R : neighbourhood radius T : time coefficient","title":"Usage"},{"location":"libs/fds/#interaction-models","text":"Here are defined two physically based interaction algorithms: a hammer and a bow. These functions need to be coupled to the mesh pde, in the point where the interaction happens: to do so, the mesh output signals can be fed back and driven into the force block using the interpolation operators. The latters can be also used to drive the single force output signal to the correct scheme points.","title":"Interaction Models"},{"location":"libs/fds/#fdshammer","text":"Implementation of a nonlinear collision model. The hammer is essentially a finite difference scheme of a linear damped oscillator, which is coupled with the mesh through the collision model (see Stefan Bilbao's book, Numerical Sound Synthesis).","title":"(fds.)hammer"},{"location":"libs/fds/#usage_15","text":"_ :hammer(coeff,omega0Sqr,sigma0,kH,alpha,k,offset,fIn) : _ Where: coeff : output force scaling coefficient omega0Sqr : squared angular frequency of the hammer oscillator sigma0 : damping coefficient of the hammer oscillator kH : hammer stiffness coefficient alpha : nonlinearity parameter k : time sampling step (the same as for the mesh) offset : distance between the string and the hammer at rest in meters fIn : hammer excitation signal (i.e. a button)","title":"Usage"},{"location":"libs/fds/#fdsbow","text":"Implementation of a nonlinear friction based interaction model that induces Helmholtz motion. (see Stefan Bilbao's book, Numerical Sound Synthesis).","title":"(fds.)bow"},{"location":"libs/fds/#usage_16","text":"_ :bow(coeff,alpha,k,vb) : _ Where: coeff : output force scaling coefficient alpha : nonlinearity parameter k : time sampling step (the same as for the mesh) vb : bow velocity [m/s]","title":"Usage"},{"location":"libs/filters/","text":"filters.lib Faust Filters library. Its official prefix is fi . The Filters library is organized into 19 sections: Basic Filters Comb Filters Direct-Form Digital Filter Sections Direct-Form Second-Order Biquad Sections Ladder/Lattice Digital Filters Useful Special Cases Ladder/Lattice Allpass Filters Digital Filter Sections Specified as Analog Filter Sections Simple Resonator Filters Butterworth Lowpass/Highpass Filters Special Filter-Bank Delay-Equalizing Allpass Filters Elliptic (Cauer) Lowpass Filters Elliptic Highpass Filters Butterworth Bandpass/Bandstop Filters Elliptic Bandpass Filters Parametric Equalizers (Shelf, Peaking) Mth-Octave Filter-Banks Arbitrary-Crossover Filter-Banks and Spectrum Analyzers SVF filters Basic Filters (fi.)zero One zero filter. Difference equation: y(n) = x(n) - zx(n-1) . Usage _ : zero(z) : _ Where: z : location of zero along real axis in z-plane Reference https://ccrma.stanford.edu/~jos/filters/One_Zero.html (fi.)pole One pole filter. Could also be called a \"leaky integrator\". Difference equation: y(n) = x(n) + py(n-1) . Usage _ : pole(p) : _ Where: p : pole location = feedback coefficient Reference https://ccrma.stanford.edu/~jos/filters/One_Pole.html (fi.)integrator Same as pole(1) [implemented separately for block-diagram clarity]. (fi.)dcblockerat DC blocker with configurable break frequency. The amplitude response is substantially flat above fb , and sloped at about +6 dB/octave below fb . Derived from the analog transfer function H(s) = \\frac{s}{(s + 2 \\pi fb)} (which can be seen as a 1st-order Butterworth highpass filter) by the low-frequency-matching bilinear transform method (i.e., the standard frequency-scaling constant 2*SR). Usage _ : dcblockerat(fb) : _ Where: fb : \"break frequency\" in Hz, i.e., -3 dB gain frequency. Reference https://ccrma.stanford.edu/~jos/pasp/Bilinear_Transformation.html (fi.)dcblocker DC blocker. Default dc blocker has -3dB point near 35 Hz (at 44.1 kHz) and high-frequency gain near 1.0025 (due to no scaling). dcblocker is as standard Faust function. Usage _ : dcblocker : _ (fi.)lptN One-pole lowpass filter with arbitrary dis/charging factors set in dB and times set in seconds. Usage _ : lptN(N, tN) : _ Where: N : is the attenuation factor in dB tN : is the filter period in seconds, that is, the time for the impulse response to decay by N dB Reference https://ccrma.stanford.edu/~jos/mdft/Exponentials.html Special cases of lptN Comb Filters (fi.)ff_comb Feed-Forward Comb Filter. Note that ff_comb requires integer delays (uses delay internally). ff_comb is a standard Faust function. Usage _ : ff_comb(maxdel,intdel,b0,bM) : _ Where: maxdel : maximum delay (a power of 2) intdel : current (integer) comb-filter delay between 0 and maxdel del : current (float) comb-filter delay between 0 and maxdel b0 : gain applied to delay-line input bM : gain applied to delay-line output and then summed with input Reference https://ccrma.stanford.edu/~jos/pasp/Feedforward_Comb_Filters.html (fi.)ff_fcomb Feed-Forward Comb Filter. Note that ff_fcomb takes floating-point delays (uses fdelay internally). ff_fcomb is a standard Faust function. Usage _ : ff_fcomb(maxdel,del,b0,bM) : _ Where: maxdel : maximum delay (a power of 2) intdel : current (integer) comb-filter delay between 0 and maxdel del : current (float) comb-filter delay between 0 and maxdel b0 : gain applied to delay-line input bM : gain applied to delay-line output and then summed with input Reference https://ccrma.stanford.edu/~jos/pasp/Feedforward_Comb_Filters.html (fi.)ffcombfilter Typical special case of ff_comb() where: b0 = 1 . (fi.)fb_comb Feed-Back Comb Filter (integer delay). Usage _ : fb_comb(maxdel,intdel,b0,aN) : _ Where: maxdel : maximum delay (a power of 2) intdel : current (integer) comb-filter delay between 0 and maxdel del : current (float) comb-filter delay between 0 and maxdel b0 : gain applied to delay-line input and forwarded to output aN : minus the gain applied to delay-line output before summing with the input and feeding to the delay line Reference https://ccrma.stanford.edu/~jos/pasp/Feedback_Comb_Filters.html (fi.)fb_fcomb Feed-Back Comb Filter (floating point delay). Usage _ : fb_fcomb(maxdel,del,b0,aN) : _ Where: maxdel : maximum delay (a power of 2) intdel : current (integer) comb-filter delay between 0 and maxdel del : current (float) comb-filter delay between 0 and maxdel b0 : gain applied to delay-line input and forwarded to output aN : minus the gain applied to delay-line output before summing with the input and feeding to the delay line Reference https://ccrma.stanford.edu/~jos/pasp/Feedback_Comb_Filters.html (fi.)rev1 Special case of fb_comb ( rev1(maxdel,N,g) ). The \"rev1 section\" dates back to the 1960s in computer-music reverberation. See the jcrev and brassrev in reverbs.lib for usage examples. (fi.)fbcombfilter and (fi.)ffbcombfilter Other special cases of Feed-Back Comb Filter. Usage _ : fbcombfilter(maxdel,intdel,g) : _ _ : ffbcombfilter(maxdel,del,g) : _ Where: maxdel : maximum delay (a power of 2) intdel : current (integer) comb-filter delay between 0 and maxdel del : current (float) comb-filter delay between 0 and maxdel g : feedback gain Reference https://ccrma.stanford.edu/~jos/pasp/Feedback_Comb_Filters.html (fi.)allpass_comb Schroeder Allpass Comb Filter. Note that: allpass_comb(maxlen,len,aN) = ff_comb(maxlen,len,aN,1) : fb_comb(maxlen,len-1,1,aN); which is a direct-form-1 implementation, requiring two delay lines. The implementation here is direct-form-2 requiring only one delay line. Usage _ : allpass_comb(maxdel,intdel,aN) : _ Where: maxdel : maximum delay (a power of 2) intdel : current (integer) comb-filter delay between 0 and maxdel del : current (float) comb-filter delay between 0 and maxdel aN : minus the feedback gain References https://ccrma.stanford.edu/~jos/pasp/Allpass_Two_Combs.html https://ccrma.stanford.edu/~jos/pasp/Schroeder_Allpass_Sections.html https://ccrma.stanford.edu/~jos/filters/Four_Direct_Forms.html (fi.)allpass_fcomb Schroeder Allpass Comb Filter. Note that: allpass_comb(maxlen,len,aN) = ff_comb(maxlen,len,aN,1) : fb_comb(maxlen,len-1,1,aN); which is a direct-form-1 implementation, requiring two delay lines. The implementation here is direct-form-2 requiring only one delay line. allpass_fcomb is a standard Faust library. Usage _ : allpass_comb(maxdel,intdel,aN) : _ _ : allpass_fcomb(maxdel,del,aN) : _ Where: maxdel : maximum delay (a power of 2) intdel : current (float) comb-filter delay between 0 and maxdel del : current (float) comb-filter delay between 0 and maxdel aN : minus the feedback gain References https://ccrma.stanford.edu/~jos/pasp/Allpass_Two_Combs.html https://ccrma.stanford.edu/~jos/pasp/Schroeder_Allpass_Sections.html https://ccrma.stanford.edu/~jos/filters/Four_Direct_Forms.html (fi.)rev2 Special case of allpass_comb ( rev2(maxlen,len,g) ). The \"rev2 section\" dates back to the 1960s in computer-music reverberation. See the jcrev and brassrev in reverbs.lib for usage examples. (fi.)allpass_fcomb5 and (fi.)allpass_fcomb1a Same as allpass_fcomb but use fdelay5 and fdelay1a internally (Interpolation helps - look at an fft of faust2octave on `1-1' <: allpass_fcomb(1024,10.5,0.95), allpass_fcomb5(1024,10.5,0.95);`). Direct-Form Digital Filter Sections (fi.)iir Nth-order Infinite-Impulse-Response (IIR) digital filter, implemented in terms of the Transfer-Function (TF) coefficients. Such filter structures are termed \"direct form\". iir is a standard Faust function. Usage _ : iir(bcoeffs,acoeffs) : _ Where: bcoeffs : (b0,b1,...,b_order) = TF numerator coefficients acoeffs : (a1,...,a_order) = TF denominator coeffs (a0=1) Reference https://ccrma.stanford.edu/~jos/filters/Four_Direct_Forms.html (fi.)fir FIR filter (convolution of FIR filter coefficients with a signal). Usage _ : fir(bv) : _ fir is standard Faust function. Where: bv = b0,b1,...,bn is a parallel bank of coefficient signals. Note bv is processed using pattern-matching at compile time, so it must have this normal form (parallel signals). Example Smoothing white noise with a five-point moving average: bv = .2,.2,.2,.2,.2; process = noise : fir(bv); Equivalent (note double parens): process = noise : fir((.2,.2,.2,.2,.2)); (fi.)conv and (fi.)convN Convolution of input signal with given coefficients. Usage _ : conv((k1,k2,k3,...,kN)) : _; // Argument = one signal bank _ : convN(N,(k1,k2,k3,...)) : _; // Useful when N < count((k1,...)) (fi.)tf1 , (fi.)tf2 and (fi.)tf3 tfN = N'th-order direct-form digital filter. Usage _ : tf1(b0,b1,a1) : _ _ : tf2(b0,b1,b2,a1,a2) : _ _ : tf3(b0,b1,b2,b3,a1,a2,a3) : _ Where: a : the poles b : the zeros Reference https://ccrma.stanford.edu/~jos/fp/Direct_Form_I.html (fi.)notchw Simple notch filter based on a biquad ( tf2 ). notchw is a standard Faust function. Usage: _ : notchw(width,freq) : _ Where: width : \"notch width\" in Hz (approximate) freq : \"notch frequency\" in Hz Reference https://ccrma.stanford.edu/~jos/pasp/Phasing_2nd_Order_Allpass_Filters.html Direct-Form Second-Order Biquad Sections Direct-Form Second-Order Biquad Sections Reference https://ccrma.stanford.edu/~jos/filters/Four_Direct_Forms.html (fi.)tf21 , (fi.)tf22 , (fi.)tf22t and (fi.)tf21t tfN = N'th-order direct-form digital filter where: tf21 is tf2, direct-form 1 tf22 is tf2, direct-form 2 tf22t is tf2, direct-form 2 transposed tf21t is tf2, direct-form 1 transposed Usage _ : tf21(b0,b1,b2,a1,a2) : _ _ : tf22(b0,b1,b2,a1,a2) : _ _ : tf22t(b0,b1,b2,a1,a2) : _ _ : tf21t(b0,b1,b2,a1,a2) : _ Where: a : the poles b : the zeros Reference https://ccrma.stanford.edu/~jos/fp/Direct_Form_I.html Ladder/Lattice Digital Filters Ladder and lattice digital filters generally have superior numerical properties relative to direct-form digital filters. They can be derived from digital waveguide filters, which gives them a physical interpretation. Reference F. Itakura and S. Saito: \"Digital Filtering Techniques for Speech Analysis and Synthesis\", 7th Int. Cong. Acoustics, Budapest, 25 C 1, 1971. J. D. Markel and A. H. Gray: Linear Prediction of Speech, New York: Springer Verlag, 1976. https://ccrma.stanford.edu/~jos/pasp/Conventional_Ladder_Filters.html (fi.)av2sv Compute reflection coefficients sv from transfer-function denominator av. Usage sv = av2sv(av) Where: av : parallel signal bank a1,...,aN sv : parallel signal bank s1,...,sN where ro = ith reflection coefficient, and ai = coefficient of z^(-i) in the filter transfer-function denominator A(z) . Reference https://ccrma.stanford.edu/~jos/filters/Step_Down_Procedure.html (where reflection coefficients are denoted by k rather than s). (fi.)bvav2nuv Compute lattice tap coefficients from transfer-function coefficients. Usage nuv = bvav2nuv(bv,av) Where: av : parallel signal bank a1,...,aN bv : parallel signal bank b0,b1,...,aN nuv : parallel signal bank nu1,...,nuN where nui is the i'th tap coefficient, bi is the coefficient of z^(-i) in the filter numerator, ai is the coefficient of z^(-i) in the filter denominator (fi.)iir_lat2 Two-multiply latice IIR filter of arbitrary order. Usage _ : iir_lat2(bv,av) : _ Where: bv: zeros as a bank of parallel signals av: poles as a bank of parallel signals (fi.)allpassnt Two-multiply lattice allpass (nested order-1 direct-form-ii allpasses). Usage _ : allpassnt(n,sv) : _ Where: n : the order of the filter sv : the reflection coefficients (-1 1) (fi.)iir_kl Kelly-Lochbaum ladder IIR filter of arbitrary order. Usage _ : iir_kl(bv,av) : _ Where: bv: zeros as a bank of parallel signals av: poles as a bank of parallel signals (fi.)allpassnklt Kelly-Lochbaum ladder allpass. Usage: _ : allpassklt(n,sv) : _ Where: n : the order of the filter sv : the reflection coefficients (-1 1) (fi.)iir_lat1 One-multiply latice IIR filter of arbitrary order. Usage _ : iir_lat1(bv,av) : _ Where: bv: zeros as a bank of parallel signals av: poles as a bank of parallel signals (fi.)allpassn1mt One-multiply lattice allpass with tap lines. Usage _ : allpassn1mt(N,sv) : _ Where: N : the order of the filter (fixed at compile time) sv : the reflection coefficients (-1 1) (fi.)iir_nl Normalized ladder filter of arbitrary order. Usage _ : iir_nl(bv,av) : _ Where: bv: zeros as a bank of parallel signals av: poles as a bank of parallel signals References J. D. Markel and A. H. Gray, Linear Prediction of Speech, New York: Springer Verlag, 1976. https://ccrma.stanford.edu/~jos/pasp/Normalized_Scattering_Junctions.html (fi.)allpassnnlt Normalized ladder allpass filter of arbitrary order. Usage: _ : allpassnnlt(N,sv) : _ Where: N : the order of the filter (fixed at compile time) sv : the reflection coefficients (-1,1) References J. D. Markel and A. H. Gray, Linear Prediction of Speech, New York: Springer Verlag, 1976. https://ccrma.stanford.edu/~jos/pasp/Normalized_Scattering_Junctions.html Useful Special Cases (fi.)tf2np Biquad based on a stable second-order Normalized Ladder Filter (more robust to modulation than tf2 and protected against instability). Usage _ : tf2np(b0,b1,b2,a1,a2) : _ Where: a : the poles b : the zeros (fi.)wgr Second-order transformer-normalized digital waveguide resonator. Usage _ : wgr(f,r) : _ Where: f : resonance frequency (Hz) r : loss factor for exponential decay (set to 1 to make a numerically stable oscillator) References https://ccrma.stanford.edu/~jos/pasp/Power_Normalized_Waveguide_Filters.html https://ccrma.stanford.edu/~jos/pasp/Digital_Waveguide_Oscillator.html (fi.)nlf2 Second order normalized digital waveguide resonator. Usage _ : nlf2(f,r) : _ Where: f : resonance frequency (Hz) r : loss factor for exponential decay (set to 1 to make a sinusoidal oscillator) Reference https://ccrma.stanford.edu/~jos/pasp/Power_Normalized_Waveguide_Filters.html (fi.)apnl Passive Nonlinear Allpass based on Pierce switching springs idea. Switch between allpass coefficient a1 and a2 at signal zero crossings. Usage _ : apnl(a1,a2) : _ Where: a1 and a2 : allpass coefficients Reference \"A Passive Nonlinear Digital Filter Design ...\" by John R. Pierce and Scott A. Van Duyne, JASA, vol. 101, no. 2, pp. 1120-1126, 1997 Ladder/Lattice Allpass Filters An allpass filter has gain 1 at every frequency, but variable phase. Ladder/lattice allpass filters are specified by reflection coefficients. They are defined here as nested allpass filters, hence the names allpassn*. References https://ccrma.stanford.edu/~jos/pasp/Conventional_Ladder_Filters.html https://ccrma.stanford.edu/~jos/pasp/Nested_Allpass_Filters.html Linear Prediction of Speech, Markel and Gray, Springer Verlag, 1976 (fi.)allpassn Two-multiply lattice - each section is two multiply-adds. Usage: _ : allpassn(n,sv) : _ Where: n : the order of the filter sv : the reflection coefficients (-1 1) References J. O. Smith and R. Michon, \"Nonlinear Allpass Ladder Filters in FAUST\", in Proceedings of the 14th International Conference on Digital Audio Effects (DAFx-11), Paris, France, September 19-23, 2011. (fi.)allpassnn Normalized form - four multiplies and two adds per section, but coefficients can be time varying and nonlinear without \"parametric amplification\" (modulation of signal energy). Usage: _ : allpassnn(n,tv) : _ Where: n : the order of the filter tv : the reflection coefficients (-PI PI) (fi.)allpasskl Kelly-Lochbaum form - four multiplies and two adds per section, but all signals have an immediate physical interpretation as traveling pressure waves, etc. Usage: _ : allpassnkl(n,sv) : _ Where: n : the order of the filter sv : the reflection coefficients (-1 1) (fi.)allpass1m One-multiply form - one multiply and three adds per section. Normally the most efficient in special-purpose hardware. Usage: _ : allpassn1m(n,sv) : _ Where: n : the order of the filter sv : the reflection coefficients (-1 1) Digital Filter Sections Specified as Analog Filter Sections (fi.)tf2s and (fi.)tf2snp Second-order direct-form digital filter, specified by ANALOG transfer-function polynomials B(s)/A(s), and a frequency-scaling parameter. Digitization via the bilinear transform is built in. Usage _ : tf2s(b2,b1,b0,a1,a0,w1) : _ Where: b2 s^2 + b1 s + b0 H(s) = -------------------- s^2 + a1 s + a0 and w1 is the desired digital frequency (in radians/second) corresponding to analog frequency 1 rad/sec (i.e., s = j ). Example A second-order ANALOG Butterworth lowpass filter, normalized to have cutoff frequency at 1 rad/sec, has transfer function: 1 H(s) = ----------------- s^2 + a1 s + 1 where a1 = sqrt(2) . Therefore, a DIGITAL Butterworth lowpass cutting off at SR/4 is specified as tf2s(0,0,1,sqrt(2),1,PI*SR/2); Method Bilinear transform scaled for exact mapping of w1. Reference https://ccrma.stanford.edu/~jos/pasp/Bilinear_Transformation.html (fi.)tf3slf Analogous to tf2s above, but third order, and using the typical low-frequency-matching bilinear-transform constant 2/T (\"lf\" series) instead of the specific-frequency-matching value used in tf2s and tf1s. Note the lack of a \"w1\" argument. Usage _ : tf3slf(b3,b2,b1,b0,a3,a2,a1,a0) : _ (fi.)tf1s First-order direct-form digital filter, specified by ANALOG transfer-function polynomials B(s)/A(s), and a frequency-scaling parameter. Usage tf1s(b1,b0,a0,w1) Where: b1 s + b0 H(s) = ---------- s + a0 and w1 is the desired digital frequency (in radians/second) corresponding to analog frequency 1 rad/sec (i.e., s = j ). Example A first-order ANALOG Butterworth lowpass filter, normalized to have cutoff frequency at 1 rad/sec, has transfer function: 1 H(s) = ------- s + 1 so b0 = a0 = 1 and b1 = 0 . Therefore, a DIGITAL first-order Butterworth lowpass with gain -3dB at SR/4 is specified as tf1s(0,1,1,PI*SR/2); // digital half-band order 1 Butterworth Method Bilinear transform scaled for exact mapping of w1. Reference https://ccrma.stanford.edu/~jos/pasp/Bilinear_Transformation.html (fi.)tf2sb Bandpass mapping of tf2s : In addition to a frequency-scaling parameter w1 (set to HALF the desired passband width in rad/sec), there is a desired center-frequency parameter wc (also in rad/s). Thus, tf2sb implements a fourth-order digital bandpass filter section specified by the coefficients of a second-order analog lowpass prototype section. Such sections can be combined in series for higher orders. The order of mappings is (1) frequency scaling (to set lowpass cutoff w1), (2) bandpass mapping to wc, then (3) the bilinear transform, with the usual scale parameter 2*SR . Algebra carried out in maxima and pasted here. Usage _ : tf2sb(b2,b1,b0,a1,a0,w1,wc) : _ (fi.)tf1sb First-to-second-order lowpass-to-bandpass section mapping, analogous to tf2sb above. Usage _ : tf1sb(b1,b0,a0,w1,wc) : _ Simple Resonator Filters (fi.)resonlp Simple resonant lowpass filter based on tf2s (virtual analog). resonlp is a standard Faust function. Usage _ : resonlp(fc,Q,gain) : _ _ : resonhp(fc,Q,gain) : _ _ : resonbp(fc,Q,gain) : _ Where: fc : center frequency (Hz) Q : q gain : gain (0-1) (fi.)resonhp Simple resonant highpass filters based on tf2s (virtual analog). resonhp is a standard Faust function. Usage _ : resonlp(fc,Q,gain) : _ _ : resonhp(fc,Q,gain) : _ _ : resonbp(fc,Q,gain) : _ Where: fc : center frequency (Hz) Q : q gain : gain (0-1) (fi.)resonbp Simple resonant bandpass filters based on tf2s (virtual analog). resonbp is a standard Faust function. Usage _ : resonlp(fc,Q,gain) : _ _ : resonhp(fc,Q,gain) : _ _ : resonbp(fc,Q,gain) : _ Where: fc : center frequency (Hz) Q : q gain : gain (0-1) Butterworth Lowpass/Highpass Filters (fi.)lowpass Nth-order Butterworth lowpass filter. lowpass is a standard Faust function. Usage _ : lowpass(N,fc) : _ Where: N : filter order (number of poles) [nonnegative constant integer] fc : desired cut-off frequency (-3dB frequency) in Hz References https://ccrma.stanford.edu/~jos/filters/Butterworth_Lowpass_Design.html butter function in Octave (\"[z,p,g] = butter(N,1,'s');\") (fi.)highpass Nth-order Butterworth highpass filters. highpass is a standard Faust function. Usage _ : highpass(N,fc) : _ Where: N : filter order (number of poles) [nonnegative constant integer] fc : desired cut-off frequency (-3dB frequency) in Hz References https://ccrma.stanford.edu/~jos/filters/Butterworth_Lowpass_Design.html butter function in Octave (\"[z,p,g] = butter(N,1,'s');\") (fi.)lowpass0_highpass1 Special Filter-Bank Delay-Equalizing Allpass Filters These special allpass filters are needed by filterbank et al. below. They are equivalent to ( lowpass(N,fc) +|- highpass(N,fc))/2 , but with canceling pole-zero pairs removed (which occurs for odd N). (fi.)lowpass_plus | minus_highpass Catch-all definitions for generality - even order is done: Catch-all definitions for generality - even order is done: FIXME: Rewrite the following, as for orders 3 and 5 above, to eliminate pole-zero cancellations: FIXME: Rewrite the following, as for orders 3 and 5 above, to eliminate pole-zero cancellations: Elliptic (Cauer) Lowpass Filters Elliptic (Cauer) Lowpass Filters References http://en.wikipedia.org/wiki/Elliptic_filter functions ncauer and ellip in Octave. (fi.)lowpass3e Third-order Elliptic (Cauer) lowpass filter. Usage _ : lowpass3e(fc) : _ Where: fc : -3dB frequency in Hz Design For spectral band-slice level display (see octave_analyzer3e ): [z,p,g] = ncauer(Rp,Rs,3); % analog zeros, poles, and gain, where Rp = 60 % dB ripple in stopband Rs = 0.2 % dB ripple in passband (fi.)lowpass6e Sixth-order Elliptic/Cauer lowpass filter. Usage _ : lowpass6e(fc) : _ Where: fc : -3dB frequency in Hz Design For spectral band-slice level display (see octave_analyzer6e): [z,p,g] = ncauer(Rp,Rs,6); % analog zeros, poles, and gain, where Rp = 80 % dB ripple in stopband Rs = 0.2 % dB ripple in passband Elliptic Highpass Filters (fi.)highpass3e Third-order Elliptic (Cauer) highpass filter. Inversion of lowpass3e wrt unit circle in s plane (s <- 1/s) Usage _ : highpass3e(fc) : _ Where: fc : -3dB frequency in Hz (fi.)highpass6e Sixth-order Elliptic/Cauer highpass filter. Inversion of lowpass3e wrt unit circle in s plane (s <- 1/s) Usage _ : highpass6e(fc) : _ Where: fc : -3dB frequency in Hz Butterworth Bandpass/Bandstop Filters (fi.)bandpass Order 2*Nh Butterworth bandpass filter made using the transformation s <- s + wc^2/s on lowpass(Nh) , where wc is the desired bandpass center frequency. The lowpass(Nh) cutoff w1 is half the desired bandpass width. bandpass is a standard Faust function. Usage _ : bandpass(Nh,fl,fu) : _ Where: Nh : HALF the desired bandpass order (which is therefore even) fl : lower -3dB frequency in Hz fu : upper -3dB frequency in Hz Thus, the passband width is fu-fl , and its center frequency is (fl+fu)/2 . Reference http://cnx.org/content/m16913/latest/ (fi.)bandstop Order 2*Nh Butterworth bandstop filter made using the transformation s <- s + wc^2/s on highpass(Nh) , where wc is the desired bandpass center frequency. The highpass(Nh) cutoff w1 is half the desired bandpass width. bandstop is a standard Faust function. Usage _ : bandstop(Nh,fl,fu) : _ Where: Nh : HALF the desired bandstop order (which is therefore even) fl : lower -3dB frequency in Hz fu : upper -3dB frequency in Hz Thus, the passband (stopband) width is fu-fl , and its center frequency is (fl+fu)/2 . Reference http://cnx.org/content/m16913/latest/ Elliptic Bandpass Filters (fi.)bandpass6e Order 12 elliptic bandpass filter analogous to bandpass(6) . (fi.)bandpass12e Order 24 elliptic bandpass filter analogous to bandpass(6) . (fi.)pospass Positive-Pass Filter (single-side-band filter) Usage _ : pospass(N,fc) : _,_ where N : filter order (Butterworth bandpass for positive frequencies). fc : lower bandpass cutoff frequency in Hz. Highpass cutoff frequency at ma.SR/2 - fc Hz. Example See dm.pospass_demo Look at frequency response: Method A filter passing only positive frequencies can be made from a half-band lowpass by modulating it up to the positive-frequency range. Equivalently, down-modulate the input signal using a complex sinusoid at -SR/4 Hz, lowpass it with a half-band filter, and modulate back up by SR/4 Hz. In Faust/math notation: pospass(N) = \\ast(e^{-j\\frac{\\pi}{2}n}) : \\mbox{lowpass(N,SR/4)} : \\ast(e^{j\\frac{\\pi}{2}n}) An approximation to the Hilbert transform is given by the imaginary output signal: hilbert(N) = pospass(N) : !,*(2); References https://ccrma.stanford.edu/~jos/mdft/Analytic_Signals_Hilbert_Transform.html https://ccrma.stanford.edu/~jos/sasp/Comparison_Optimal_Chebyshev_FIR_I.html https://ccrma.stanford.edu/~jos/sasp/Hilbert_Transform.html Parametric Equalizers (Shelf, Peaking) Parametric Equalizers (Shelf, Peaking). References http://en.wikipedia.org/wiki/Equalization https://webaudio.github.io/Audio-EQ-Cookbook/Audio-EQ-Cookbook.txt Digital Audio Signal Processing, Udo Zolzer, Wiley, 1999, p. 124 https://ccrma.stanford.edu/~jos/filters/Low_High_Shelving_Filters.html https://ccrma.stanford.edu/~jos/filters/Peaking_Equalizers.html maxmsp.lib in the Faust distribution bandfilter.dsp in the faust2pd distribution (fi.)low_shelf First-order \"low shelf\" filter (gain boost|cut between dc and some frequency) low_shelf is a standard Faust function. Usage _ : lowshelf(N,L0,fx) : _ _ : low_shelf(L0,fx) : _ // default case (order 3) _ : lowshelf_other_freq(N,L0,fx) : _ Where: * N : filter order 1, 3, 5, ... (odd only). (default should be 3) * L0 : desired level (dB) between dc and fx (boost L0>0 or cut L0<0 ) * fx : -3dB frequency of lowpass band ( L0>0 ) or upper band ( L0<0 ) (see \"SHELF SHAPE\" below). The gain at SR/2 is constrained to be 1. The generalization to arbitrary odd orders is based on the well known fact that odd-order Butterworth band-splits are allpass-complementary (see filterbank documentation below for references). Shelf Shape The magnitude frequency response is approximately piecewise-linear on a log-log plot (\"BODE PLOT\"). The Bode \"stick diagram\" approximation L(lf) is easy to state in dB versus dB-frequency lf = dB(f): L0 > 0: L(lf) = L0, f between 0 and fx = 1st corner frequency; L(lf) = L0 - N * (lf - lfx), f between fx and f2 = 2nd corner frequency; L(lf) = 0, lf > lf2. lf2 = lfx + L0/N = dB-frequency at which level gets back to 0 dB. L0 < 0: L(lf) = L0, f between 0 and f1 = 1st corner frequency; L(lf) = - N * (lfx - lf), f between f1 and lfx = 2nd corner frequency; L(lf) = 0, lf > lfx. lf1 = lfx + L0/N = dB-frequency at which level goes up from L0. See lowshelf_other_freq . (fi.)high_shelf First-order \"high shelf\" filter (gain boost|cut above some frequency). high_shelf is a standard Faust function. Usage _ : highshelf(N,Lpi,fx) : _ _ : high_shelf(L0,fx) : _ // default case (order 3) _ : highshelf_other_freq(N,Lpi,fx) : _ Where: N : filter order 1, 3, 5, ... (odd only). Lpi : desired level (dB) between fx and SR/2 (boost Lpi>0 or cut Lpi<0) fx : -3dB frequency of highpass band (L0>0) or lower band (L0<0) (Use highshelf_other_freq() below to find the other one.) The gain at dc is constrained to be 1. See lowshelf documentation above for more details on shelf shape. (fi.)peak_eq Second order \"peaking equalizer\" section (gain boost or cut near some frequency) Also called a \"parametric equalizer\" section. peak_eq is a standard Faust function. Usage _ : peak_eq(Lfx,fx,B) : _; Where: Lfx : level (dB) at fx (boost Lfx>0 or cut Lfx<0) fx : peak frequency (Hz) B : bandwidth (B) of peak in Hz (fi.)peak_eq_cq Constant-Q second order peaking equalizer section. Usage _ : peak_eq_cq(Lfx,fx,Q) : _; Where: Lfx : level (dB) at fx fx : boost or cut frequency (Hz) Q : \"Quality factor\" = fx/B where B = bandwidth of peak in Hz (fi.)peak_eq_rm Regalia-Mitra second order peaking equalizer section. Usage _ : peak_eq_rm(Lfx,fx,tanPiBT) : _; Where: Lfx : level (dB) at fx fx : boost or cut frequency (Hz) tanPiBT : tan(PI*B/SR) , where B = -3dB bandwidth (Hz) when 10^(Lfx/20) = 0 ~ PI*B/SR for narrow bandwidths B Reference P.A. Regalia, S.K. Mitra, and P.P. Vaidyanathan, \"The Digital All-Pass Filter: A Versatile Signal Processing Building Block\" Proceedings of the IEEE, 76(1):19-37, Jan. 1988. (See pp. 29-30.) (fi.)spectral_tilt Spectral tilt filter, providing an arbitrary spectral rolloff factor alpha in (-1,1), where -1 corresponds to one pole (-6 dB per octave), and +1 corresponds to one zero (+6 dB per octave). In other words, alpha is the slope of the ln magnitude versus ln frequency. For a \"pinking filter\" (e.g., to generate 1/f noise from white noise), set alpha to -1/2. Usage _ : spectral_tilt(N,f0,bw,alpha) : _ Where: N : desired integer filter order (fixed at compile time) f0 : lower frequency limit for desired roll-off band > 0 bw : bandwidth of desired roll-off band alpha : slope of roll-off desired in nepers per neper, between -1 and 1 (ln mag / ln radian freq) Examples See spectral_tilt_demo . Reference J.O. Smith and H.F. Smith, \"Closed Form Fractional Integration and Differentiation via Real Exponentially Spaced Pole-Zero Pairs\", arXiv.org publication arXiv:1606.06154 [cs.CE], June 7, 2016, * http://arxiv.org/abs/1606.06154 (fi.)levelfilter Dynamic level lowpass filter. levelfilter is a standard Faust function. Usage _ : levelfilter(L,freq) : _ Where: L : desired level (in dB) at Nyquist limit (SR/2), e.g., -60 freq : corner frequency (-3dB point) usually set to fundamental freq N : Number of filters in series where L = L/N Reference https://ccrma.stanford.edu/realsimple/faust_strings/Dynamic_Level_Lowpass_Filter.html (fi.)levelfilterN Dynamic level lowpass filter. Usage _ : levelfilterN(N,freq,L) : _ Where: L : desired level (in dB) at Nyquist limit (SR/2), e.g., -60 freq : corner frequency (-3dB point) usually set to fundamental freq N : Number of filters in series where L = L/N Reference https://ccrma.stanford.edu/realsimple/faust_strings/Dynamic_Level_Lowpass_Filter.html Mth-Octave Filter-Banks Mth-octave filter-banks split the input signal into a bank of parallel signals, one for each spectral band. They are related to the Mth-Octave Spectrum-Analyzers in analysis.lib . The documentation of this library contains more details about the implementation. The parameters are: M : number of band-slices per octave (>1) N : total number of bands (>2) ftop : upper bandlimit of the Mth-octave bands (0 or cut L0<0 ) * fx : -3dB frequency of lowpass band ( L0>0 ) or upper band ( L0<0 ) (see \"SHELF SHAPE\" below). The gain at SR/2 is constrained to be 1. The generalization to arbitrary odd orders is based on the well known fact that odd-order Butterworth band-splits are allpass-complementary (see filterbank documentation below for references).","title":"Usage"},{"location":"libs/filters/#shelf-shape","text":"The magnitude frequency response is approximately piecewise-linear on a log-log plot (\"BODE PLOT\"). The Bode \"stick diagram\" approximation L(lf) is easy to state in dB versus dB-frequency lf = dB(f): L0 > 0: L(lf) = L0, f between 0 and fx = 1st corner frequency; L(lf) = L0 - N * (lf - lfx), f between fx and f2 = 2nd corner frequency; L(lf) = 0, lf > lf2. lf2 = lfx + L0/N = dB-frequency at which level gets back to 0 dB. L0 < 0: L(lf) = L0, f between 0 and f1 = 1st corner frequency; L(lf) = - N * (lfx - lf), f between f1 and lfx = 2nd corner frequency; L(lf) = 0, lf > lfx. lf1 = lfx + L0/N = dB-frequency at which level goes up from L0. See lowshelf_other_freq .","title":"Shelf Shape"},{"location":"libs/filters/#fihigh_shelf","text":"First-order \"high shelf\" filter (gain boost|cut above some frequency). high_shelf is a standard Faust function.","title":"(fi.)high_shelf"},{"location":"libs/filters/#usage_54","text":"_ : highshelf(N,Lpi,fx) : _ _ : high_shelf(L0,fx) : _ // default case (order 3) _ : highshelf_other_freq(N,Lpi,fx) : _ Where: N : filter order 1, 3, 5, ... (odd only). Lpi : desired level (dB) between fx and SR/2 (boost Lpi>0 or cut Lpi<0) fx : -3dB frequency of highpass band (L0>0) or lower band (L0<0) (Use highshelf_other_freq() below to find the other one.) The gain at dc is constrained to be 1. See lowshelf documentation above for more details on shelf shape.","title":"Usage"},{"location":"libs/filters/#fipeak_eq","text":"Second order \"peaking equalizer\" section (gain boost or cut near some frequency) Also called a \"parametric equalizer\" section. peak_eq is a standard Faust function.","title":"(fi.)peak_eq"},{"location":"libs/filters/#usage_55","text":"_ : peak_eq(Lfx,fx,B) : _; Where: Lfx : level (dB) at fx (boost Lfx>0 or cut Lfx<0) fx : peak frequency (Hz) B : bandwidth (B) of peak in Hz","title":"Usage"},{"location":"libs/filters/#fipeak_eq_cq","text":"Constant-Q second order peaking equalizer section.","title":"(fi.)peak_eq_cq"},{"location":"libs/filters/#usage_56","text":"_ : peak_eq_cq(Lfx,fx,Q) : _; Where: Lfx : level (dB) at fx fx : boost or cut frequency (Hz) Q : \"Quality factor\" = fx/B where B = bandwidth of peak in Hz","title":"Usage"},{"location":"libs/filters/#fipeak_eq_rm","text":"Regalia-Mitra second order peaking equalizer section.","title":"(fi.)peak_eq_rm"},{"location":"libs/filters/#usage_57","text":"_ : peak_eq_rm(Lfx,fx,tanPiBT) : _; Where: Lfx : level (dB) at fx fx : boost or cut frequency (Hz) tanPiBT : tan(PI*B/SR) , where B = -3dB bandwidth (Hz) when 10^(Lfx/20) = 0 ~ PI*B/SR for narrow bandwidths B","title":"Usage"},{"location":"libs/filters/#reference_22","text":"P.A. Regalia, S.K. Mitra, and P.P. Vaidyanathan, \"The Digital All-Pass Filter: A Versatile Signal Processing Building Block\" Proceedings of the IEEE, 76(1):19-37, Jan. 1988. (See pp. 29-30.)","title":"Reference"},{"location":"libs/filters/#fispectral_tilt","text":"Spectral tilt filter, providing an arbitrary spectral rolloff factor alpha in (-1,1), where -1 corresponds to one pole (-6 dB per octave), and +1 corresponds to one zero (+6 dB per octave). In other words, alpha is the slope of the ln magnitude versus ln frequency. For a \"pinking filter\" (e.g., to generate 1/f noise from white noise), set alpha to -1/2.","title":"(fi.)spectral_tilt"},{"location":"libs/filters/#usage_58","text":"_ : spectral_tilt(N,f0,bw,alpha) : _ Where: N : desired integer filter order (fixed at compile time) f0 : lower frequency limit for desired roll-off band > 0 bw : bandwidth of desired roll-off band alpha : slope of roll-off desired in nepers per neper, between -1 and 1 (ln mag / ln radian freq)","title":"Usage"},{"location":"libs/filters/#examples","text":"See spectral_tilt_demo .","title":"Examples"},{"location":"libs/filters/#reference_23","text":"J.O. Smith and H.F. Smith, \"Closed Form Fractional Integration and Differentiation via Real Exponentially Spaced Pole-Zero Pairs\", arXiv.org publication arXiv:1606.06154 [cs.CE], June 7, 2016, * http://arxiv.org/abs/1606.06154","title":"Reference"},{"location":"libs/filters/#filevelfilter","text":"Dynamic level lowpass filter. levelfilter is a standard Faust function.","title":"(fi.)levelfilter"},{"location":"libs/filters/#usage_59","text":"_ : levelfilter(L,freq) : _ Where: L : desired level (in dB) at Nyquist limit (SR/2), e.g., -60 freq : corner frequency (-3dB point) usually set to fundamental freq N : Number of filters in series where L = L/N","title":"Usage"},{"location":"libs/filters/#reference_24","text":"https://ccrma.stanford.edu/realsimple/faust_strings/Dynamic_Level_Lowpass_Filter.html","title":"Reference"},{"location":"libs/filters/#filevelfiltern","text":"Dynamic level lowpass filter.","title":"(fi.)levelfilterN"},{"location":"libs/filters/#usage_60","text":"_ : levelfilterN(N,freq,L) : _ Where: L : desired level (in dB) at Nyquist limit (SR/2), e.g., -60 freq : corner frequency (-3dB point) usually set to fundamental freq N : Number of filters in series where L = L/N","title":"Usage"},{"location":"libs/filters/#reference_25","text":"https://ccrma.stanford.edu/realsimple/faust_strings/Dynamic_Level_Lowpass_Filter.html","title":"Reference"},{"location":"libs/filters/#mth-octave-filter-banks","text":"Mth-octave filter-banks split the input signal into a bank of parallel signals, one for each spectral band. They are related to the Mth-Octave Spectrum-Analyzers in analysis.lib . The documentation of this library contains more details about the implementation. The parameters are: M : number of band-slices per octave (>1) N : total number of bands (>2) ftop : upper bandlimit of the Mth-octave bands (0. Usage _ : signum : _ (ma.)nextpow2 The nextpow2(x) returns the lowest integer m such that 2^m >= x. Usage 2^nextpow2(n) Useful for allocating delay lines, e.g., delay(2^nextpow2(maxDelayNeeded), currentDelay); (ma.)zc Indicator function for zero-crossing: it returns 1 if a zero-crossing occurs, 0 otherwise. Usage _ : zc : _","title":" maths "},{"location":"libs/maths/#mathslib","text":"Mathematic library for Faust. Its official prefix is ma .","title":"maths.lib"},{"location":"libs/maths/#functions-reference","text":"","title":"Functions Reference"},{"location":"libs/maths/#masr","text":"Current sampling rate. Constant during program execution.","title":"(ma.)SR"},{"location":"libs/maths/#usage","text":"SR : _","title":"Usage"},{"location":"libs/maths/#mabs","text":"Current block-size. Can change during the execution.","title":"(ma.)BS"},{"location":"libs/maths/#usage_1","text":"BS : _","title":"Usage"},{"location":"libs/maths/#mapi","text":"Constant PI in double precision.","title":"(ma.)PI"},{"location":"libs/maths/#usage_2","text":"PI : _","title":"Usage"},{"location":"libs/maths/#mae","text":"Constant e in double precision.","title":"(ma.)E"},{"location":"libs/maths/#usage_3","text":"E : _","title":"Usage"},{"location":"libs/maths/#maepsilon","text":"Constant EPSILON in simple/double/quad precision.","title":"(ma.)EPSILON"},{"location":"libs/maths/#usage_4","text":"EPSILON : _","title":"Usage"},{"location":"libs/maths/#mamin","text":"Constant MIN in simple/double/quad precision (minimal positive value).","title":"(ma.)MIN"},{"location":"libs/maths/#usage_5","text":"MIN : _","title":"Usage"},{"location":"libs/maths/#mainfinity","text":"Constant INFINITY in simple/double/quad precision (maximal positive value).","title":"(ma.)INFINITY"},{"location":"libs/maths/#usage_6","text":"INFINITY : _","title":"Usage"},{"location":"libs/maths/#maftz","text":"Flush to zero: force samples under the \"maximum subnormal number\" to be zero. Usually not needed in C++ because the architecture file take care of this, but can be useful in JavaScript for instance.","title":"(ma.)FTZ"},{"location":"libs/maths/#usage_7","text":"_ : FTZ : _","title":"Usage"},{"location":"libs/maths/#reference","text":"http://docs.oracle.com/cd/E19957-01/806-3568/ncg_math.html","title":"Reference"},{"location":"libs/maths/#maneg","text":"Invert the sign (-x) of a signal.","title":"(ma.)neg"},{"location":"libs/maths/#usage_8","text":"_ : neg : _","title":"Usage"},{"location":"libs/maths/#masubxy","text":"Subtract x and y .","title":"(ma.)sub(x,y)"},{"location":"libs/maths/#mainv","text":"Compute the inverse (1/x) of the input signal.","title":"(ma.)inv"},{"location":"libs/maths/#usage_9","text":"_ : inv : _","title":"Usage"},{"location":"libs/maths/#macbrt","text":"Computes the cube root of of the input signal.","title":"(ma.)cbrt"},{"location":"libs/maths/#usage_10","text":"_ : cbrt : _","title":"Usage"},{"location":"libs/maths/#mahypot","text":"Computes the euclidian distance of the two input signals sqrt(x x+y y) without undue overflow or underflow.","title":"(ma.)hypot"},{"location":"libs/maths/#usage_11","text":"_,_ : hypot : _","title":"Usage"},{"location":"libs/maths/#maldexp","text":"Takes two input signals: x and n, and multiplies x by 2 to the power n.","title":"(ma.)ldexp"},{"location":"libs/maths/#usage_12","text":"_,_ : ldexp : _","title":"Usage"},{"location":"libs/maths/#mascalb","text":"Takes two input signals: x and n, and multiplies x by 2 to the power n.","title":"(ma.)scalb"},{"location":"libs/maths/#usage_13","text":"_,_ : scalb : _","title":"Usage"},{"location":"libs/maths/#malog1p","text":"Computes log(1 + x) without undue loss of accuracy when x is nearly zero.","title":"(ma.)log1p"},{"location":"libs/maths/#usage_14","text":"_ : log1p : _","title":"Usage"},{"location":"libs/maths/#malogb","text":"Return exponent of the input signal as a floating-point number.","title":"(ma.)logb"},{"location":"libs/maths/#usage_15","text":"_ : logb : _","title":"Usage"},{"location":"libs/maths/#mailogb","text":"Return exponent of the input signal as an integer number.","title":"(ma.)ilogb"},{"location":"libs/maths/#usage_16","text":"_ : ilogb : _","title":"Usage"},{"location":"libs/maths/#malog2","text":"Returns the base 2 logarithm of x.","title":"(ma.)log2"},{"location":"libs/maths/#usage_17","text":"_ : log2 : _","title":"Usage"},{"location":"libs/maths/#maexpm1","text":"Return exponent of the input signal minus 1 with better precision.","title":"(ma.)expm1"},{"location":"libs/maths/#usage_18","text":"_ : expm1 : _","title":"Usage"},{"location":"libs/maths/#maacosh","text":"Computes the principle value of the inverse hyperbolic cosine of the input signal.","title":"(ma.)acosh"},{"location":"libs/maths/#usage_19","text":"_ : acosh : _","title":"Usage"},{"location":"libs/maths/#maasinh","text":"Computes the inverse hyperbolic sine of the input signal.","title":"(ma.)asinh"},{"location":"libs/maths/#usage_20","text":"_ : asinh : _","title":"Usage"},{"location":"libs/maths/#maatanh","text":"Computes the inverse hyperbolic tangent of the input signal.","title":"(ma.)atanh"},{"location":"libs/maths/#usage_21","text":"_ : atanh : _","title":"Usage"},{"location":"libs/maths/#masinh","text":"Computes the hyperbolic sine of the input signal.","title":"(ma.)sinh"},{"location":"libs/maths/#usage_22","text":"_ : sinh : _","title":"Usage"},{"location":"libs/maths/#macosh","text":"Computes the hyperbolic cosine of the input signal.","title":"(ma.)cosh"},{"location":"libs/maths/#usage_23","text":"_ : cosh : _","title":"Usage"},{"location":"libs/maths/#matanh","text":"Computes the hyperbolic tangent of the input signal.","title":"(ma.)tanh"},{"location":"libs/maths/#usage_24","text":"_ : tanh : _","title":"Usage"},{"location":"libs/maths/#maerf","text":"Computes the error function of the input signal.","title":"(ma.)erf"},{"location":"libs/maths/#usage_25","text":"_ : erf : _","title":"Usage"},{"location":"libs/maths/#maerfc","text":"Computes the complementary error function of the input signal.","title":"(ma.)erfc"},{"location":"libs/maths/#usage_26","text":"_ : erfc : _","title":"Usage"},{"location":"libs/maths/#magamma","text":"Computes the gamma function of the input signal.","title":"(ma.)gamma"},{"location":"libs/maths/#usage_27","text":"_ : gamma : _","title":"Usage"},{"location":"libs/maths/#malgamma","text":"Calculates the natural logorithm of the absolute value of the gamma function of the input signal.","title":"(ma.)lgamma"},{"location":"libs/maths/#usage_28","text":"_ : lgamma : _","title":"Usage"},{"location":"libs/maths/#maj0","text":"Computes the Bessel function of the first kind of order 0 of the input signal.","title":"(ma.)J0"},{"location":"libs/maths/#usage_29","text":"_ : J0 : _","title":"Usage"},{"location":"libs/maths/#maj1","text":"Computes the Bessel function of the first kind of order 1 of the input signal.","title":"(ma.)J1"},{"location":"libs/maths/#usage_30","text":"_ : J1 : _","title":"Usage"},{"location":"libs/maths/#majn","text":"Computes the Bessel function of the first kind of order n (first input signal) of the second input signal.","title":"(ma.)Jn"},{"location":"libs/maths/#usage_31","text":"_,_ : Jn : _","title":"Usage"},{"location":"libs/maths/#may0","text":"Computes the linearly independent Bessel function of the second kind of order 0 of the input signal.","title":"(ma.)Y0"},{"location":"libs/maths/#usage_32","text":"_ : Y0 : _","title":"Usage"},{"location":"libs/maths/#may1","text":"Computes the linearly independent Bessel function of the second kind of order 1 of the input signal.","title":"(ma.)Y1"},{"location":"libs/maths/#usage_33","text":"_ : Y0 : _","title":"Usage"},{"location":"libs/maths/#mayn","text":"Computes the linearly independent Bessel function of the second kind of order n (first input signal) of the second input signal.","title":"(ma.)Yn"},{"location":"libs/maths/#usage_34","text":"_,_ : Yn : _","title":"Usage"},{"location":"libs/maths/#mafabs-mafmax-mafmin","text":"Just for compatibility... fabs = abs fmax = max fmin = min","title":"(ma.)fabs, (ma.)fmax, (ma.)fmin"},{"location":"libs/maths/#manp2","text":"Gives the next power of 2 of x.","title":"(ma.)np2"},{"location":"libs/maths/#usage_35","text":"np2(n) : _ Where: n : an integer","title":"Usage"},{"location":"libs/maths/#mafrac","text":"Gives the fractional part of n.","title":"(ma.)frac"},{"location":"libs/maths/#usage_36","text":"frac(n) : _ Where: n : a decimal number","title":"Usage"},{"location":"libs/maths/#mamodulo","text":"Modulus operation.","title":"(ma.)modulo"},{"location":"libs/maths/#usage_37","text":"modulo(x,N) : _ Where: x : the numerator N : the denominator","title":"Usage"},{"location":"libs/maths/#maisnan","text":"Return non-zero if x is a NaN.","title":"(ma.)isnan"},{"location":"libs/maths/#usage_38","text":"isnan(x) _ : isnan : _ Where: x : signal to analyse","title":"Usage"},{"location":"libs/maths/#maisinf","text":"Return non-zero if x is a positive or negative infinity.","title":"(ma.)isinf"},{"location":"libs/maths/#usage_39","text":"isinf(x) _ : isinf : _ Where: x : signal to analyse","title":"Usage"},{"location":"libs/maths/#machebychev","text":"Chebychev transformation of order n.","title":"(ma.)chebychev"},{"location":"libs/maths/#usage_40","text":"_ : chebychev(n) : _ Where: n : the order of the polynomial","title":"Usage"},{"location":"libs/maths/#semantics","text":"T[0](x) = 1, T[1](x) = x, T[n](x) = 2x*T[n-1](x) - T[n-2](x)","title":"Semantics"},{"location":"libs/maths/#reference_1","text":"http://en.wikipedia.org/wiki/Chebyshev_polynomial","title":"Reference"},{"location":"libs/maths/#machebychevpoly","text":"Linear combination of the first Chebyshev polynomials.","title":"(ma.)chebychevpoly"},{"location":"libs/maths/#usage_41","text":"_ : chebychevpoly((c0,c1,...,cn)) : _ Where: cn : the different Chebychevs polynomials such that: chebychevpoly((c0,c1,...,cn)) = Sum of chebychev(i)*ci","title":"Usage"},{"location":"libs/maths/#reference_2","text":"http://www.csounds.com/manual/html/chebyshevpoly.html","title":"Reference"},{"location":"libs/maths/#madiffn","text":"Negated first-order difference.","title":"(ma.)diffn"},{"location":"libs/maths/#usage_42","text":"_ : diffn : _","title":"Usage"},{"location":"libs/maths/#masignum","text":"The signum function signum(x) is defined as -1 for x<0, 0 for x==0, and 1 for x>0.","title":"(ma.)signum"},{"location":"libs/maths/#usage_43","text":"_ : signum : _","title":"Usage"},{"location":"libs/maths/#manextpow2","text":"The nextpow2(x) returns the lowest integer m such that 2^m >= x.","title":"(ma.)nextpow2"},{"location":"libs/maths/#usage_44","text":"2^nextpow2(n) Useful for allocating delay lines, e.g., delay(2^nextpow2(maxDelayNeeded), currentDelay);","title":"Usage"},{"location":"libs/maths/#mazc","text":"Indicator function for zero-crossing: it returns 1 if a zero-crossing occurs, 0 otherwise.","title":"(ma.)zc"},{"location":"libs/maths/#usage_45","text":"_ : zc : _","title":"Usage"},{"location":"libs/mi/","text":"mi.lib This ongoing work is the fruit of a collaboration between GRAME-CNCM and the ANIS (Arts Num\u00e9riques et Immersions Sensorielles) research group from GIPSA-Lab (Universit\u00e9 Grenoble Alpes). This library implements basic 1-DoF mass-interaction physics algorithms, allowing to declare and connect physical elements (masses, springs, non linear interactions, etc.) together to form topological networks. Models can be assembled by hand, however in more complex scenarios it is recommended to use a scripting tool (such as MIMS) to generate the FAUST signal routing for a given physical network. https://github.com/rmichon/mi_faust http://mi-creative.eu/tool_miFaust.html http://mi-creative.eu/paper_lac19.html Sources The core mass-interaction algorithms implemented in this library are in the public domain and are disclosed in the following scientific publications: Claude Cadoz, Annie Luciani, Jean-Loup Florens, Curtis Roads and Fran\u00e7oise Chabade. Responsive Input Devices and Sound Synthesis by Stimulation of Instrumental Mechanisms: The Cordis System. Computer Music Journal, Vol 8. No. 3, 1984. Claude Cadoz, Annie Luciani and Jean Loup Florens. CORDIS-ANIMA: A Modeling and Simulation System for Sound and Image Synthesis: The General Formalism. Computer Music Journal. Vol. 17, No. 1, 1993. Alexandros Kontogeorgakopoulos and Claude Cadoz. Cordis Anima Physical Modeling and Simulation System Analysis. In Proceedings of the Sound and Music Computing Conference (SMC-07), Lefkada, Greece, 2007. Nicolas Castagne, Claude Cadoz, Ali Allaoui and Olivier Tache. G3: Genesis Software Environment Update. In Proceedings of the International Computer Music Conference (ICMC-09), Montreal, Canada, 2009. Nicolas Castagn\u00e9 and Claude Cadoz. Genesis 3: Plate-forme pour la cr\u00e9ation musicale \u00e0 l'aide des mod\u00e8les physiques Cordis-Anima. In Proceedings of the Journ\u00e9e de l'Informatique Musicale, Grenoble, France, 2009. Edgar Berdahl and Julius O. Smith. An Introduction to the Synth-A-Modeler Compiler: Modular and Open-Source Sound Synthesis using Physical Models. In Proceedings of the Linux Audio Conference (LAC-12), Stanford, USA, 2012. James Leonard and Claude Cadoz. Physical Modelling Concepts for a Collection of Multisensory Virtual Musical Instruments. In Proceedings of the New Interfaces for Musical Expression (NIME-15) Conference, Baton Rouge, USA, 2015. Utility Functions These utility functions are used to help certain operations (e.g. define initial positions and velocities for physical elements). (mi.)initState Used to set initial delayed position values that must be initialised at step 0 of the physics simulation. If you develop any of your own modules, you will need to use this (see mass and springDamper algorithm codes for examples). Usage x: initState(x0) : _ Where: x : position value signal x0 : initial value for position Mass Algorithms All mass-type physical element functions are declared here. They all expect to receive a force input signal and produce a position signal. All physical parameters are expressed in sample-rate dependant values. (mi.)mass Implementation of a punctual mass element. Takes an input force and produces output position. Usage mass(m, grav, x0, xr0),_ : _ Where: m : mass value grav : gravity force value x0 : initial position xr0 : initial delayed position (inferred from initial velocity) (mi.)oscil Implementation of a simple linear harmonic oscillator. Takes an input force and produces output position. Usage oscil(m, k, z, grav, x0, xr0),_ : _ Where: m : mass value k : stiffness value z : damping value grav : gravity force value x0 : initial position xr0 : initial delayed position (inferred from initial velocity) (mi.)ground Implementation of a fixed point element. The position output produced by this module never changes, however it still expects a force input signal (for compliance with connection rules). Usage ground(x0),_ : _ Where: x0 : initial position (mi.)posInput Implementation of a position input module (driven by an outside signal). Takes two signal inputs: incoming force (which doesn't affect position) and the driving position signal. Usage posInput(x0),_,_ : _ Where: x0 : initial position Interaction Algorithms All interaction-type physical element functions are declared here. They each expect to receive two position signals (coming from the two mass-elements that they connect) and produce two equal and opposite force signals that must be routed back to the mass elements' inputs. All physical parameters are expressed in sample-rate dependant values. (mi.)spring Implementation of a linear elastic spring interaction. Usage spring(k, x1r, x2r),_,_ : _,_ Where: k : stiffness value x1r : initial delayed position of mass 1 (unused here) x2r : initial delayed position of mass 2 (unused here) (mi.)damper Implementation of a linear damper interaction. Beware: in 32bit precision mode, damping forces can become truncated if position values are not centered around zero! Usage damper(z, x1r, x2r),_,_ : _,_ Where: z : damping value x1r : initial delayed position of mass 1 x2r : initial delayed position of mass 2 (mi.)springDamper Implementation of a linear viscoelastic spring-damper interaction (a combination of the spring and damper modules). Usage springDamper(k, z, x1r, x2r),_,_ : _,_ Where: k : stiffness value z : damping value x1r : initial delayed position of mass 1 x2r : initial delayed position of mass 2 (mi.)nlSpringDamper2 Implementation of a non-linear viscoelastic spring-damper interaction containing a quadratic term (function of squared distance). Beware: at high displacements, this interaction will break numerical stability conditions ! The nlSpringDamperClipped is a safer option. Usage nlSpringDamper2(k, q, z, x1r, x2r),_,_ : _,_ Where: k : linear stiffness value q : quadratic stiffness value z : damping value x1r : initial delayed position of mass 1 x2r : initial delayed position of mass 2 (mi.)nlSpringDamper3 Implementation of a non-linear viscoelastic spring-damper interaction containing a cubic term (function of distance^3). Beware: at high displacements, this interaction will break numerical stability conditions ! The nlSpringDamperClipped is a safer option. Usage nlSpringDamper3(k, q, z, x1r, x2r),_,_ : _,_ Where: k : linear stiffness value q : cubic stiffness value z : damping value x1r : initial delayed position of mass 1 x2r : initial delayed position of mass 2 (mi.)nlSpringDamperClipped Implementation of a non-linear viscoelastic spring-damper interaction containing a cubic term (function of distance^3), bound by an upper linear stiffness (hard-clipping). This bounding means that when faced with strong displacements, the interaction profile will \"clip\" at a given point and never produce forces higher than the bounding equivalent linear spring, stopping models from becoming unstable. So far the interaction clips \"hard\" (with no soft-knee spline interpolation, etc.) Usage nlSpringDamperClipped(s, c, k, z, x1r, x2r),_,_ : _,_ Where: s : linear stiffness value c : cubic stiffness value k : upper-bound linear stiffness value z : (linear) damping value x1r : initial delayed position of mass 1 x2r : initial delayed position of mass 2 (mi.)nlPluck Implementation of a piecewise linear plucking interaction. The symmetric function provides a repulsive viscoelastic interaction upon contact, until a tipping point is reached (when the plucking occurs). The tipping point depends both on the stiffness and the distance scaling of the interaction. Usage nlPluck(knl, scale, z, x1r, x2r),_,_ : _,_ Where: knl : stiffness scaling parameter (vertical stretch of the NL function) scale : distance scaling parameter (horizontal stretch of the NL function) z : (linear) damping value x1r : initial delayed position of mass 1 x2r : initial delayed position of mass 2 (mi.)nlBow Implementation of a non-linear friction based interaction that allows for stick-slip bowing behaviour. Two versions are proposed : a piecewise linear function (very similar to the nlPluck) or a mathematical approximation (see Stefan Bilbao's book, Numerical Sound Synthesis). Usage nlBow(znl, scale, type, x1r, x2r),_,_ : _,_ Where: znl : friction scaling parameter (vertical stretch of the NL function) scale : velocity scaling parameter (horizontal stretch of the NL function) type : interaction profile (0 = piecewise linear, 1 = smooth function) x1r : initial delayed position of mass 1 x2r : initial delayed position of mass 2 (mi.)collision Implementation of a collision interaction, producing linear visco-elastic repulsion forces when two mass elements are interpenetrating. Usage collision(k, z, thres, x1r, x2r),_,_ : _,_ Where: k : collision stiffness parameter z : collision damping parameter thres : threshold distance for the contact between elements x1r : initial delayed position of mass 1 x2r : initial delayed position of mass 2 (mi.)nlCollisionClipped Implementation of a collision interaction, producing non-linear visco-elastic repulsion forces when two mass elements are interpenetrating. Bound by an upper stiffness value to maintain stability. This interaction is particularly useful for more realistic contact dynamics (greater difference in velocity provides sharper contacts, and reciprocally). Usage nlCollisionClipped(s, c, k, z, thres, x1r, x2r),_,_ : _,_ Where: s : collision linear stiffness parameter c : collision cubic stiffness parameter k : collision upper-bounding stiffness parameter z : collision damping parameter thres : threshold distance for the contact between elements x1r : initial delayed position of mass 1 x2r : initial delayed position of mass 2","title":" mi "},{"location":"libs/mi/#milib","text":"This ongoing work is the fruit of a collaboration between GRAME-CNCM and the ANIS (Arts Num\u00e9riques et Immersions Sensorielles) research group from GIPSA-Lab (Universit\u00e9 Grenoble Alpes). This library implements basic 1-DoF mass-interaction physics algorithms, allowing to declare and connect physical elements (masses, springs, non linear interactions, etc.) together to form topological networks. Models can be assembled by hand, however in more complex scenarios it is recommended to use a scripting tool (such as MIMS) to generate the FAUST signal routing for a given physical network. https://github.com/rmichon/mi_faust http://mi-creative.eu/tool_miFaust.html http://mi-creative.eu/paper_lac19.html","title":"mi.lib"},{"location":"libs/mi/#sources","text":"The core mass-interaction algorithms implemented in this library are in the public domain and are disclosed in the following scientific publications: Claude Cadoz, Annie Luciani, Jean-Loup Florens, Curtis Roads and Fran\u00e7oise Chabade. Responsive Input Devices and Sound Synthesis by Stimulation of Instrumental Mechanisms: The Cordis System. Computer Music Journal, Vol 8. No. 3, 1984. Claude Cadoz, Annie Luciani and Jean Loup Florens. CORDIS-ANIMA: A Modeling and Simulation System for Sound and Image Synthesis: The General Formalism. Computer Music Journal. Vol. 17, No. 1, 1993. Alexandros Kontogeorgakopoulos and Claude Cadoz. Cordis Anima Physical Modeling and Simulation System Analysis. In Proceedings of the Sound and Music Computing Conference (SMC-07), Lefkada, Greece, 2007. Nicolas Castagne, Claude Cadoz, Ali Allaoui and Olivier Tache. G3: Genesis Software Environment Update. In Proceedings of the International Computer Music Conference (ICMC-09), Montreal, Canada, 2009. Nicolas Castagn\u00e9 and Claude Cadoz. Genesis 3: Plate-forme pour la cr\u00e9ation musicale \u00e0 l'aide des mod\u00e8les physiques Cordis-Anima. In Proceedings of the Journ\u00e9e de l'Informatique Musicale, Grenoble, France, 2009. Edgar Berdahl and Julius O. Smith. An Introduction to the Synth-A-Modeler Compiler: Modular and Open-Source Sound Synthesis using Physical Models. In Proceedings of the Linux Audio Conference (LAC-12), Stanford, USA, 2012. James Leonard and Claude Cadoz. Physical Modelling Concepts for a Collection of Multisensory Virtual Musical Instruments. In Proceedings of the New Interfaces for Musical Expression (NIME-15) Conference, Baton Rouge, USA, 2015.","title":"Sources"},{"location":"libs/mi/#utility-functions","text":"These utility functions are used to help certain operations (e.g. define initial positions and velocities for physical elements).","title":"Utility Functions"},{"location":"libs/mi/#miinitstate","text":"Used to set initial delayed position values that must be initialised at step 0 of the physics simulation. If you develop any of your own modules, you will need to use this (see mass and springDamper algorithm codes for examples).","title":"(mi.)initState"},{"location":"libs/mi/#usage","text":"x: initState(x0) : _ Where: x : position value signal x0 : initial value for position","title":"Usage"},{"location":"libs/mi/#mass-algorithms","text":"All mass-type physical element functions are declared here. They all expect to receive a force input signal and produce a position signal. All physical parameters are expressed in sample-rate dependant values.","title":"Mass Algorithms"},{"location":"libs/mi/#mimass","text":"Implementation of a punctual mass element. Takes an input force and produces output position.","title":"(mi.)mass"},{"location":"libs/mi/#usage_1","text":"mass(m, grav, x0, xr0),_ : _ Where: m : mass value grav : gravity force value x0 : initial position xr0 : initial delayed position (inferred from initial velocity)","title":"Usage"},{"location":"libs/mi/#mioscil","text":"Implementation of a simple linear harmonic oscillator. Takes an input force and produces output position.","title":"(mi.)oscil"},{"location":"libs/mi/#usage_2","text":"oscil(m, k, z, grav, x0, xr0),_ : _ Where: m : mass value k : stiffness value z : damping value grav : gravity force value x0 : initial position xr0 : initial delayed position (inferred from initial velocity)","title":"Usage"},{"location":"libs/mi/#miground","text":"Implementation of a fixed point element. The position output produced by this module never changes, however it still expects a force input signal (for compliance with connection rules).","title":"(mi.)ground"},{"location":"libs/mi/#usage_3","text":"ground(x0),_ : _ Where: x0 : initial position","title":"Usage"},{"location":"libs/mi/#miposinput","text":"Implementation of a position input module (driven by an outside signal). Takes two signal inputs: incoming force (which doesn't affect position) and the driving position signal.","title":"(mi.)posInput"},{"location":"libs/mi/#usage_4","text":"posInput(x0),_,_ : _ Where: x0 : initial position","title":"Usage"},{"location":"libs/mi/#interaction-algorithms","text":"All interaction-type physical element functions are declared here. They each expect to receive two position signals (coming from the two mass-elements that they connect) and produce two equal and opposite force signals that must be routed back to the mass elements' inputs. All physical parameters are expressed in sample-rate dependant values.","title":"Interaction Algorithms"},{"location":"libs/mi/#mispring","text":"Implementation of a linear elastic spring interaction.","title":"(mi.)spring"},{"location":"libs/mi/#usage_5","text":"spring(k, x1r, x2r),_,_ : _,_ Where: k : stiffness value x1r : initial delayed position of mass 1 (unused here) x2r : initial delayed position of mass 2 (unused here)","title":"Usage"},{"location":"libs/mi/#midamper","text":"Implementation of a linear damper interaction. Beware: in 32bit precision mode, damping forces can become truncated if position values are not centered around zero!","title":"(mi.)damper"},{"location":"libs/mi/#usage_6","text":"damper(z, x1r, x2r),_,_ : _,_ Where: z : damping value x1r : initial delayed position of mass 1 x2r : initial delayed position of mass 2","title":"Usage"},{"location":"libs/mi/#mispringdamper","text":"Implementation of a linear viscoelastic spring-damper interaction (a combination of the spring and damper modules).","title":"(mi.)springDamper"},{"location":"libs/mi/#usage_7","text":"springDamper(k, z, x1r, x2r),_,_ : _,_ Where: k : stiffness value z : damping value x1r : initial delayed position of mass 1 x2r : initial delayed position of mass 2","title":"Usage"},{"location":"libs/mi/#minlspringdamper2","text":"Implementation of a non-linear viscoelastic spring-damper interaction containing a quadratic term (function of squared distance). Beware: at high displacements, this interaction will break numerical stability conditions ! The nlSpringDamperClipped is a safer option.","title":"(mi.)nlSpringDamper2"},{"location":"libs/mi/#usage_8","text":"nlSpringDamper2(k, q, z, x1r, x2r),_,_ : _,_ Where: k : linear stiffness value q : quadratic stiffness value z : damping value x1r : initial delayed position of mass 1 x2r : initial delayed position of mass 2","title":"Usage"},{"location":"libs/mi/#minlspringdamper3","text":"Implementation of a non-linear viscoelastic spring-damper interaction containing a cubic term (function of distance^3). Beware: at high displacements, this interaction will break numerical stability conditions ! The nlSpringDamperClipped is a safer option.","title":"(mi.)nlSpringDamper3"},{"location":"libs/mi/#usage_9","text":"nlSpringDamper3(k, q, z, x1r, x2r),_,_ : _,_ Where: k : linear stiffness value q : cubic stiffness value z : damping value x1r : initial delayed position of mass 1 x2r : initial delayed position of mass 2","title":"Usage"},{"location":"libs/mi/#minlspringdamperclipped","text":"Implementation of a non-linear viscoelastic spring-damper interaction containing a cubic term (function of distance^3), bound by an upper linear stiffness (hard-clipping). This bounding means that when faced with strong displacements, the interaction profile will \"clip\" at a given point and never produce forces higher than the bounding equivalent linear spring, stopping models from becoming unstable. So far the interaction clips \"hard\" (with no soft-knee spline interpolation, etc.)","title":"(mi.)nlSpringDamperClipped"},{"location":"libs/mi/#usage_10","text":"nlSpringDamperClipped(s, c, k, z, x1r, x2r),_,_ : _,_ Where: s : linear stiffness value c : cubic stiffness value k : upper-bound linear stiffness value z : (linear) damping value x1r : initial delayed position of mass 1 x2r : initial delayed position of mass 2","title":"Usage"},{"location":"libs/mi/#minlpluck","text":"Implementation of a piecewise linear plucking interaction. The symmetric function provides a repulsive viscoelastic interaction upon contact, until a tipping point is reached (when the plucking occurs). The tipping point depends both on the stiffness and the distance scaling of the interaction.","title":"(mi.)nlPluck"},{"location":"libs/mi/#usage_11","text":"nlPluck(knl, scale, z, x1r, x2r),_,_ : _,_ Where: knl : stiffness scaling parameter (vertical stretch of the NL function) scale : distance scaling parameter (horizontal stretch of the NL function) z : (linear) damping value x1r : initial delayed position of mass 1 x2r : initial delayed position of mass 2","title":"Usage"},{"location":"libs/mi/#minlbow","text":"Implementation of a non-linear friction based interaction that allows for stick-slip bowing behaviour. Two versions are proposed : a piecewise linear function (very similar to the nlPluck) or a mathematical approximation (see Stefan Bilbao's book, Numerical Sound Synthesis).","title":"(mi.)nlBow"},{"location":"libs/mi/#usage_12","text":"nlBow(znl, scale, type, x1r, x2r),_,_ : _,_ Where: znl : friction scaling parameter (vertical stretch of the NL function) scale : velocity scaling parameter (horizontal stretch of the NL function) type : interaction profile (0 = piecewise linear, 1 = smooth function) x1r : initial delayed position of mass 1 x2r : initial delayed position of mass 2","title":"Usage"},{"location":"libs/mi/#micollision","text":"Implementation of a collision interaction, producing linear visco-elastic repulsion forces when two mass elements are interpenetrating.","title":"(mi.)collision"},{"location":"libs/mi/#usage_13","text":"collision(k, z, thres, x1r, x2r),_,_ : _,_ Where: k : collision stiffness parameter z : collision damping parameter thres : threshold distance for the contact between elements x1r : initial delayed position of mass 1 x2r : initial delayed position of mass 2","title":"Usage"},{"location":"libs/mi/#minlcollisionclipped","text":"Implementation of a collision interaction, producing non-linear visco-elastic repulsion forces when two mass elements are interpenetrating. Bound by an upper stiffness value to maintain stability. This interaction is particularly useful for more realistic contact dynamics (greater difference in velocity provides sharper contacts, and reciprocally).","title":"(mi.)nlCollisionClipped"},{"location":"libs/mi/#usage_14","text":"nlCollisionClipped(s, c, k, z, thres, x1r, x2r),_,_ : _,_ Where: s : collision linear stiffness parameter c : collision cubic stiffness parameter k : collision upper-bounding stiffness parameter z : collision damping parameter thres : threshold distance for the contact between elements x1r : initial delayed position of mass 1 x2r : initial delayed position of mass 2","title":"Usage"},{"location":"libs/misceffects/","text":"misceffects.lib This library contains a collection of audio effects. Its official prefix is ef . Dynamic (ef.)cubicnl Cubic nonlinearity distortion. cubicnl is a standard Faust library. Usage: _ : cubicnl(drive,offset) : _ _ : cubicnl_nodc(drive,offset) : _ Where: drive : distortion amount, between 0 and 1 offset : constant added before nonlinearity to give even harmonics. Note: offset can introduce a nonzero mean - feed cubicnl output to dcblocker to remove this. References: https://ccrma.stanford.edu/~jos/pasp/Cubic_Soft_Clipper.html https://ccrma.stanford.edu/~jos/pasp/Nonlinear_Distortion.html (ef.)gate_mono Mono signal gate. gate_mono is a standard Faust function. Usage _ : gate_mono(thresh,att,hold,rel) : _ Where: thresh : dB level threshold above which gate opens (e.g., -60 dB) att : attack time = time constant (sec) for gate to open (e.g., 0.0001 s = 0.1 ms) hold : hold time = time (sec) gate stays open after signal level < thresh (e.g., 0.1 s) rel : release time = time constant (sec) for gate to close (e.g., 0.020 s = 20 ms) References http://en.wikipedia.org/wiki/Noise_gate http://www.soundonsound.com/sos/apr01/articles/advanced.asp http://en.wikipedia.org/wiki/Gating_(sound_engineering) (ef.)gate_stereo Stereo signal gates. gate_stereo is a standard Faust function. Usage _,_ : gate_stereo(thresh,att,hold,rel) : _,_ Where: thresh : dB level threshold above which gate opens (e.g., -60 dB) att : attack time = time constant (sec) for gate to open (e.g., 0.0001 s = 0.1 ms) hold : hold time = time (sec) gate stays open after signal level < thresh (e.g., 0.1 s) rel : release time = time constant (sec) for gate to close (e.g., 0.020 s = 20 ms) References http://en.wikipedia.org/wiki/Noise_gate http://www.soundonsound.com/sos/apr01/articles/advanced.asp http://en.wikipedia.org/wiki/Gating_(sound_engineering) Filtering (ef.)speakerbp Dirt-simple speaker simulator (overall bandpass eq with observed roll-offs above and below the passband). Low-frequency speaker model = +12 dB/octave slope breaking to flat near f1. Implemented using two dc blockers in series. High-frequency model = -24 dB/octave slope implemented using a fourth-order Butterworth lowpass. Example based on measured Celestion G12 (12\" speaker): speakerbp is a standard Faust function Usage speakerbp(f1,f2) _ : speakerbp(130,5000) : _ (ef.)piano_dispersion_filter Piano dispersion allpass filter in closed form. Usage piano_dispersion_filter(M,B,f0) _ : piano_dispersion_filter(1,B,f0) : +(totalDelay),_ : fdelay(maxDelay) : _ Where: M : number of first-order allpass sections (compile-time only) Keep below 20. 8 is typical for medium-sized piano strings. B : string inharmonicity coefficient (0.0001 is typical) f0 : fundamental frequency in Hz Outputs MINUS the estimated delay at f0 of allpass chain in samples, provided in negative form to facilitate subtraction from delay-line length. Output signal from allpass chain Reference \"Dispersion Modeling in Waveguide Piano Synthesis Using Tunable Allpass Filters\", by Jukka Rauhala and Vesa Valimaki, DAFX-2006, pp. 71-76 http://lib.tkk.fi/Diss/2007/isbn9789512290666/article2.pdf An erratum in Eq. (7) is corrected in Dr. Rauhala's encompassing dissertation (and below). http://www.acoustics.hut.fi/research/asp/piano/ (ef.)stereo_width Stereo Width effect using the Blumlein Shuffler technique. stereo_width is a standard Faust function. Usage _,_ : stereo_width(w) : _,_ Where: w : stereo width between 0 and 1 At w=0 , the output signal is mono ((left+right)/2 in both channels). At w=1 , there is no effect (original stereo image). Thus, w between 0 and 1 varies stereo width from 0 to \"original\". Reference \"Applications of Blumlein Shuffling to Stereo Microphone Techniques\" Michael A. Gerzon, JAES vol. 42, no. 6, June 1994 Meshes (ef.)mesh_square Square Rectangular Digital Waveguide Mesh. Usage bus(4*N) : mesh_square(N) : bus(4*N); Where: N : number of nodes along each edge - a power of two (1,2,4,8,...) Reference https://ccrma.stanford.edu/~jos/pasp/Digital_Waveguide_Mesh.html Signal Order In and Out The mesh is constructed recursively using 2x2 embeddings. Thus, the top level of mesh_square(M) is a block 2x2 mesh, where each block is a mesh(M/2) . Let these blocks be numbered 1,2,3,4 in the geometry NW,NE,SW,SE, i.e., as 1 2 3 4 Each block has four vector inputs and four vector outputs, where the length of each vector is M/2 . Label the input vectors as Ni,Ei,Wi,Si, i.e., as the inputs from the North, East South, and West, and similarly for the outputs. Then, for example, the upper left input block of M/2 signals is labeled 1Ni. Most of the connections are internal, such as 1Eo -> 2Wi. The 8*(M/2) input signals are grouped in the order 1Ni 2Ni 3Si 4Si 1Wi 3Wi 2Ei 4Ei and the output signals are 1No 1Wo 2No 2Eo 3So 3Wo 4So 4Eo or In: 1No 1Wo 2No 2Eo 3So 3Wo 4So 4Eo Out: 1Ni 2Ni 3Si 4Si 1Wi 3Wi 2Ei 4Ei Thus, the inputs are grouped by direction N,S,W,E, while the outputs are grouped by block number 1,2,3,4, which can also be interpreted as directions NW, NE, SW, SE. A simple program illustrating these orderings is process = mesh_square(2); . Example Reflectively terminated mesh impulsed at one corner: mesh_square_test(N,x) = mesh_square(N)~(busi(4*N,x)) // input to corner with { busi(N,x) = bus(N) : par(i,N,*(-1)) : par(i,N-1,_), +(x); }; process = 1-1' : mesh_square_test(4); // all modes excited forever In this simple example, the mesh edges are connected as follows: 1No -> 1Ni, 1Wo -> 2Ni, 2No -> 3Si, 2Eo -> 4Si, 3So -> 1Wi, 3Wo -> 3Wi, 4So -> 2Ei, 4Eo -> 4Ei A routing matrix can be used to obtain other connection geometries. (ef.)reverseEchoN(nChans,delay) Reverse echo effect Usage _ : ef.reverseEchoN(N,delay) : si.bus(N) Where: N : Number of channels desired (1 or more) delay : echo delay (integer power of 2) Demo _ : dm.reverseEchoN(N) : _,_ Description The effect uses N instances of reverseDelayRamped at different phases. (ef.)reverseDelayRamped(delay,phase) Reverse delay with amplitude ramp Usage _ : ef.reverseDelayRamped(delay,phase) : _ Where: delay : echo delay (integer power of 2) phase : float between 0 and 1 giving ramp delay phase*delay Demo _ : dm.reverseEchoN(N) : _,_ (ef.)uniformPanToStereo(nChans) Pan nChans channels to the stereo field, spread uniformly left to right Usage si.bus(N) : ef.uniformPanToStereo(N) : _,_ Where: N : Number of input channels to pan down to stereo Demo _ : dm.reverseEchoN(N) : _,_ Time Based (ef.)echo A simple echo effect. echo is a standard Faust function Usage _ : echo(maxDuration,duration,feedback) : _ Where: maxDuration : the max echo duration in seconds duration : the echo duration in seconds feedback : the feedback coefficient Pitch Shifting (ef.)transpose A simple pitch shifter based on 2 delay lines. transpose is a standard Faust function. Usage _ : transpose(w, x, s) : _ Where: w : the window length (samples) x : crossfade duration duration (samples) s : shift (semitones)","title":" misceffects "},{"location":"libs/misceffects/#misceffectslib","text":"This library contains a collection of audio effects. Its official prefix is ef .","title":"misceffects.lib"},{"location":"libs/misceffects/#dynamic","text":"","title":"Dynamic"},{"location":"libs/misceffects/#efcubicnl","text":"Cubic nonlinearity distortion. cubicnl is a standard Faust library.","title":"(ef.)cubicnl"},{"location":"libs/misceffects/#usage","text":"_ : cubicnl(drive,offset) : _ _ : cubicnl_nodc(drive,offset) : _ Where: drive : distortion amount, between 0 and 1 offset : constant added before nonlinearity to give even harmonics. Note: offset can introduce a nonzero mean - feed cubicnl output to dcblocker to remove this.","title":"Usage:"},{"location":"libs/misceffects/#references","text":"https://ccrma.stanford.edu/~jos/pasp/Cubic_Soft_Clipper.html https://ccrma.stanford.edu/~jos/pasp/Nonlinear_Distortion.html","title":"References:"},{"location":"libs/misceffects/#efgate_mono","text":"Mono signal gate. gate_mono is a standard Faust function.","title":"(ef.)gate_mono"},{"location":"libs/misceffects/#usage_1","text":"_ : gate_mono(thresh,att,hold,rel) : _ Where: thresh : dB level threshold above which gate opens (e.g., -60 dB) att : attack time = time constant (sec) for gate to open (e.g., 0.0001 s = 0.1 ms) hold : hold time = time (sec) gate stays open after signal level < thresh (e.g., 0.1 s) rel : release time = time constant (sec) for gate to close (e.g., 0.020 s = 20 ms)","title":"Usage"},{"location":"libs/misceffects/#references_1","text":"http://en.wikipedia.org/wiki/Noise_gate http://www.soundonsound.com/sos/apr01/articles/advanced.asp http://en.wikipedia.org/wiki/Gating_(sound_engineering)","title":"References"},{"location":"libs/misceffects/#efgate_stereo","text":"Stereo signal gates. gate_stereo is a standard Faust function.","title":"(ef.)gate_stereo"},{"location":"libs/misceffects/#usage_2","text":"_,_ : gate_stereo(thresh,att,hold,rel) : _,_ Where: thresh : dB level threshold above which gate opens (e.g., -60 dB) att : attack time = time constant (sec) for gate to open (e.g., 0.0001 s = 0.1 ms) hold : hold time = time (sec) gate stays open after signal level < thresh (e.g., 0.1 s) rel : release time = time constant (sec) for gate to close (e.g., 0.020 s = 20 ms)","title":"Usage"},{"location":"libs/misceffects/#references_2","text":"http://en.wikipedia.org/wiki/Noise_gate http://www.soundonsound.com/sos/apr01/articles/advanced.asp http://en.wikipedia.org/wiki/Gating_(sound_engineering)","title":"References"},{"location":"libs/misceffects/#filtering","text":"","title":"Filtering"},{"location":"libs/misceffects/#efspeakerbp","text":"Dirt-simple speaker simulator (overall bandpass eq with observed roll-offs above and below the passband). Low-frequency speaker model = +12 dB/octave slope breaking to flat near f1. Implemented using two dc blockers in series. High-frequency model = -24 dB/octave slope implemented using a fourth-order Butterworth lowpass. Example based on measured Celestion G12 (12\" speaker): speakerbp is a standard Faust function","title":"(ef.)speakerbp"},{"location":"libs/misceffects/#usage_3","text":"speakerbp(f1,f2) _ : speakerbp(130,5000) : _","title":"Usage"},{"location":"libs/misceffects/#efpiano_dispersion_filter","text":"Piano dispersion allpass filter in closed form.","title":"(ef.)piano_dispersion_filter"},{"location":"libs/misceffects/#usage_4","text":"piano_dispersion_filter(M,B,f0) _ : piano_dispersion_filter(1,B,f0) : +(totalDelay),_ : fdelay(maxDelay) : _ Where: M : number of first-order allpass sections (compile-time only) Keep below 20. 8 is typical for medium-sized piano strings. B : string inharmonicity coefficient (0.0001 is typical) f0 : fundamental frequency in Hz","title":"Usage"},{"location":"libs/misceffects/#outputs","text":"MINUS the estimated delay at f0 of allpass chain in samples, provided in negative form to facilitate subtraction from delay-line length. Output signal from allpass chain","title":"Outputs"},{"location":"libs/misceffects/#reference","text":"\"Dispersion Modeling in Waveguide Piano Synthesis Using Tunable Allpass Filters\", by Jukka Rauhala and Vesa Valimaki, DAFX-2006, pp. 71-76 http://lib.tkk.fi/Diss/2007/isbn9789512290666/article2.pdf An erratum in Eq. (7) is corrected in Dr. Rauhala's encompassing dissertation (and below). http://www.acoustics.hut.fi/research/asp/piano/","title":"Reference"},{"location":"libs/misceffects/#efstereo_width","text":"Stereo Width effect using the Blumlein Shuffler technique. stereo_width is a standard Faust function.","title":"(ef.)stereo_width"},{"location":"libs/misceffects/#usage_5","text":"_,_ : stereo_width(w) : _,_ Where: w : stereo width between 0 and 1 At w=0 , the output signal is mono ((left+right)/2 in both channels). At w=1 , there is no effect (original stereo image). Thus, w between 0 and 1 varies stereo width from 0 to \"original\".","title":"Usage"},{"location":"libs/misceffects/#reference_1","text":"\"Applications of Blumlein Shuffling to Stereo Microphone Techniques\" Michael A. Gerzon, JAES vol. 42, no. 6, June 1994","title":"Reference"},{"location":"libs/misceffects/#meshes","text":"","title":"Meshes"},{"location":"libs/misceffects/#efmesh_square","text":"Square Rectangular Digital Waveguide Mesh.","title":"(ef.)mesh_square"},{"location":"libs/misceffects/#usage_6","text":"bus(4*N) : mesh_square(N) : bus(4*N); Where: N : number of nodes along each edge - a power of two (1,2,4,8,...)","title":"Usage"},{"location":"libs/misceffects/#reference_2","text":"https://ccrma.stanford.edu/~jos/pasp/Digital_Waveguide_Mesh.html","title":"Reference"},{"location":"libs/misceffects/#signal-order-in-and-out","text":"The mesh is constructed recursively using 2x2 embeddings. Thus, the top level of mesh_square(M) is a block 2x2 mesh, where each block is a mesh(M/2) . Let these blocks be numbered 1,2,3,4 in the geometry NW,NE,SW,SE, i.e., as 1 2 3 4 Each block has four vector inputs and four vector outputs, where the length of each vector is M/2 . Label the input vectors as Ni,Ei,Wi,Si, i.e., as the inputs from the North, East South, and West, and similarly for the outputs. Then, for example, the upper left input block of M/2 signals is labeled 1Ni. Most of the connections are internal, such as 1Eo -> 2Wi. The 8*(M/2) input signals are grouped in the order 1Ni 2Ni 3Si 4Si 1Wi 3Wi 2Ei 4Ei and the output signals are 1No 1Wo 2No 2Eo 3So 3Wo 4So 4Eo or In: 1No 1Wo 2No 2Eo 3So 3Wo 4So 4Eo Out: 1Ni 2Ni 3Si 4Si 1Wi 3Wi 2Ei 4Ei Thus, the inputs are grouped by direction N,S,W,E, while the outputs are grouped by block number 1,2,3,4, which can also be interpreted as directions NW, NE, SW, SE. A simple program illustrating these orderings is process = mesh_square(2); .","title":"Signal Order In and Out"},{"location":"libs/misceffects/#example","text":"Reflectively terminated mesh impulsed at one corner: mesh_square_test(N,x) = mesh_square(N)~(busi(4*N,x)) // input to corner with { busi(N,x) = bus(N) : par(i,N,*(-1)) : par(i,N-1,_), +(x); }; process = 1-1' : mesh_square_test(4); // all modes excited forever In this simple example, the mesh edges are connected as follows: 1No -> 1Ni, 1Wo -> 2Ni, 2No -> 3Si, 2Eo -> 4Si, 3So -> 1Wi, 3Wo -> 3Wi, 4So -> 2Ei, 4Eo -> 4Ei A routing matrix can be used to obtain other connection geometries.","title":"Example"},{"location":"libs/misceffects/#efreverseechonnchansdelay","text":"Reverse echo effect","title":"(ef.)reverseEchoN(nChans,delay)"},{"location":"libs/misceffects/#usage_7","text":"_ : ef.reverseEchoN(N,delay) : si.bus(N) Where: N : Number of channels desired (1 or more) delay : echo delay (integer power of 2)","title":"Usage"},{"location":"libs/misceffects/#demo","text":"_ : dm.reverseEchoN(N) : _,_","title":"Demo"},{"location":"libs/misceffects/#description","text":"The effect uses N instances of reverseDelayRamped at different phases.","title":"Description"},{"location":"libs/misceffects/#efreversedelayrampeddelayphase","text":"Reverse delay with amplitude ramp","title":"(ef.)reverseDelayRamped(delay,phase)"},{"location":"libs/misceffects/#usage_8","text":"_ : ef.reverseDelayRamped(delay,phase) : _ Where: delay : echo delay (integer power of 2) phase : float between 0 and 1 giving ramp delay phase*delay","title":"Usage"},{"location":"libs/misceffects/#demo_1","text":"_ : dm.reverseEchoN(N) : _,_","title":"Demo"},{"location":"libs/misceffects/#efuniformpantostereonchans","text":"Pan nChans channels to the stereo field, spread uniformly left to right","title":"(ef.)uniformPanToStereo(nChans)"},{"location":"libs/misceffects/#usage_9","text":"si.bus(N) : ef.uniformPanToStereo(N) : _,_ Where: N : Number of input channels to pan down to stereo","title":"Usage"},{"location":"libs/misceffects/#demo_2","text":"_ : dm.reverseEchoN(N) : _,_","title":"Demo"},{"location":"libs/misceffects/#time-based","text":"","title":"Time Based"},{"location":"libs/misceffects/#efecho","text":"A simple echo effect. echo is a standard Faust function","title":"(ef.)echo"},{"location":"libs/misceffects/#usage_10","text":"_ : echo(maxDuration,duration,feedback) : _ Where: maxDuration : the max echo duration in seconds duration : the echo duration in seconds feedback : the feedback coefficient","title":"Usage"},{"location":"libs/misceffects/#pitch-shifting","text":"","title":"Pitch Shifting"},{"location":"libs/misceffects/#eftranspose","text":"A simple pitch shifter based on 2 delay lines. transpose is a standard Faust function.","title":"(ef.)transpose"},{"location":"libs/misceffects/#usage_11","text":"_ : transpose(w, x, s) : _ Where: w : the window length (samples) x : crossfade duration duration (samples) s : shift (semitones)","title":"Usage"},{"location":"libs/noises/","text":"noises.lib Faust Noise Generator Library. Its official prefix is no . Functions Reference (no.)noise White noise generator (outputs random number between -1 and 1). Noise is a standard Faust function. Usage noise : _ (no.)multirandom Generates multiple decorrelated random numbers in parallel. Usage multirandom(n) : si.bus(n) Where: n : the number of decorrelated random numbers in parallel (no.)multinoise Generates multiple decorrelated noises in parallel. Usage multinoise(n) : si.bus(n) Where: n : the number of decorrelated random numbers in parallel (no.)noises TODO. (no.)pink_noise Pink noise (1/f noise) generator (third-order approximation) pink_noise is a standard Faust function. Usage pink_noise : _; Reference: https://ccrma.stanford.edu/~jos/sasp/Example_Synthesis_1_F_Noise.html (no.)pink_noise_vm Multi pink noise generator. Usage pink_noise_vm(N) : _; Where: N : number of latched white-noise processes to sum, not to exceed sizeof(int) in C++ (typically 32). References http://www.dsprelated.com/showarticle/908.php http://www.firstpr.com.au/dsp/pink-noise/#Voss-McCartney (no.)lfnoise , (no.)lfnoise0 and (no.)lfnoiseN Low-frequency noise generators (Butterworth-filtered downsampled white noise). Usage lfnoise0(rate) : _; new random number every int(SR/rate) samples or so lfnoiseN(N,rate) : _; same as \"lfnoise0(rate) : lowpass(N,rate)\" [see filters.lib] lfnoise(rate) : _; same as \"lfnoise0(rate) : seq(i,5,lowpass(N,rate))\" (no overshoot) Example (view waveforms in faust2octave): rate = SR/100.0; new random value every 100 samples (SR from music.lib) process = lfnoise0(rate), sampled/held noise (piecewise constant) lfnoiseN(3,rate), lfnoise0 smoothed by 3rd order Butterworth LPF lfnoise(rate); lfnoise0 smoothed with no overshoot (no.)sparse_noise_vm sparse noise generator. Usage sparse_noise(f0) : _; Where: f0 : average frequency of noise impulses per second Random impulses in the amplitude range -1 to 1 are generated at an average rate of f0 impulses per second. Reference See velvet_noise (no.)velvet_noise_vm velvet noise generator. Usage velvet_noise(amp,f0) : _; Where: amp : amplitude of noise impulses (positive and negative) f0 : average frequency of noise impulses per second Reference Matti Karjalainen and Hanna Jarvelainen, \"Reverberation Modeling Using Velvet Noise\", in Proc. 30th Int. Conf. Intelligent Audio Environments (AES07), March 2007. (no.)gnoise approximate zero-mean, unit-variance Gaussian white noise generator. Usage gnoise(N) : _; Where: N : number of uniform random numbers added to approximate Gaussian white noise Reference See Central Limit Theorem","title":" noises "},{"location":"libs/noises/#noiseslib","text":"Faust Noise Generator Library. Its official prefix is no .","title":"noises.lib"},{"location":"libs/noises/#functions-reference","text":"","title":"Functions Reference"},{"location":"libs/noises/#nonoise","text":"White noise generator (outputs random number between -1 and 1). Noise is a standard Faust function.","title":"(no.)noise"},{"location":"libs/noises/#usage","text":"noise : _","title":"Usage"},{"location":"libs/noises/#nomultirandom","text":"Generates multiple decorrelated random numbers in parallel.","title":"(no.)multirandom"},{"location":"libs/noises/#usage_1","text":"multirandom(n) : si.bus(n) Where: n : the number of decorrelated random numbers in parallel","title":"Usage"},{"location":"libs/noises/#nomultinoise","text":"Generates multiple decorrelated noises in parallel.","title":"(no.)multinoise"},{"location":"libs/noises/#usage_2","text":"multinoise(n) : si.bus(n) Where: n : the number of decorrelated random numbers in parallel","title":"Usage"},{"location":"libs/noises/#nonoises","text":"TODO.","title":"(no.)noises"},{"location":"libs/noises/#nopink_noise","text":"Pink noise (1/f noise) generator (third-order approximation) pink_noise is a standard Faust function.","title":"(no.)pink_noise"},{"location":"libs/noises/#usage_3","text":"pink_noise : _;","title":"Usage"},{"location":"libs/noises/#reference","text":"https://ccrma.stanford.edu/~jos/sasp/Example_Synthesis_1_F_Noise.html","title":"Reference:"},{"location":"libs/noises/#nopink_noise_vm","text":"Multi pink noise generator.","title":"(no.)pink_noise_vm"},{"location":"libs/noises/#usage_4","text":"pink_noise_vm(N) : _; Where: N : number of latched white-noise processes to sum, not to exceed sizeof(int) in C++ (typically 32).","title":"Usage"},{"location":"libs/noises/#references","text":"http://www.dsprelated.com/showarticle/908.php http://www.firstpr.com.au/dsp/pink-noise/#Voss-McCartney","title":"References"},{"location":"libs/noises/#nolfnoise-nolfnoise0-and-nolfnoisen","text":"Low-frequency noise generators (Butterworth-filtered downsampled white noise).","title":"(no.)lfnoise, (no.)lfnoise0 and (no.)lfnoiseN"},{"location":"libs/noises/#usage_5","text":"lfnoise0(rate) : _; new random number every int(SR/rate) samples or so lfnoiseN(N,rate) : _; same as \"lfnoise0(rate) : lowpass(N,rate)\" [see filters.lib] lfnoise(rate) : _; same as \"lfnoise0(rate) : seq(i,5,lowpass(N,rate))\" (no overshoot)","title":"Usage"},{"location":"libs/noises/#example","text":"(view waveforms in faust2octave): rate = SR/100.0; new random value every 100 samples (SR from music.lib) process = lfnoise0(rate), sampled/held noise (piecewise constant) lfnoiseN(3,rate), lfnoise0 smoothed by 3rd order Butterworth LPF lfnoise(rate); lfnoise0 smoothed with no overshoot","title":"Example"},{"location":"libs/noises/#nosparse_noise_vm","text":"sparse noise generator.","title":"(no.)sparse_noise_vm"},{"location":"libs/noises/#usage_6","text":"sparse_noise(f0) : _; Where: f0 : average frequency of noise impulses per second Random impulses in the amplitude range -1 to 1 are generated at an average rate of f0 impulses per second.","title":"Usage"},{"location":"libs/noises/#reference_1","text":"See velvet_noise","title":"Reference"},{"location":"libs/noises/#novelvet_noise_vm","text":"velvet noise generator.","title":"(no.)velvet_noise_vm"},{"location":"libs/noises/#usage_7","text":"velvet_noise(amp,f0) : _; Where: amp : amplitude of noise impulses (positive and negative) f0 : average frequency of noise impulses per second","title":"Usage"},{"location":"libs/noises/#reference_2","text":"Matti Karjalainen and Hanna Jarvelainen, \"Reverberation Modeling Using Velvet Noise\", in Proc. 30th Int. Conf. Intelligent Audio Environments (AES07), March 2007.","title":"Reference"},{"location":"libs/noises/#nognoise","text":"approximate zero-mean, unit-variance Gaussian white noise generator.","title":"(no.)gnoise"},{"location":"libs/noises/#usage_8","text":"gnoise(N) : _; Where: N : number of uniform random numbers added to approximate Gaussian white noise","title":"Usage"},{"location":"libs/noises/#reference_3","text":"See Central Limit Theorem","title":"Reference"},{"location":"libs/oscillators/","text":"oscillators.lib This library contains a collection of sound generators. Its official prefix is os . Wave-Table-Based Oscillators (os.)sinwaveform Sine waveform ready to use with a rdtable . Usage sinwaveform(tablesize) : _ Where: tablesize : the table size (os.)coswaveform Cosine waveform ready to use with a rdtable . Usage coswaveform(tablesize) : _ Where: tablesize : the table size (os.)phasor A simple phasor to be used with a rdtable . phasor is a standard Faust function. Usage phasor(tablesize,freq) : _ Where: tablesize : the table size freq : the frequency of the phasor (Hz) (os.)hs_phasor Hardsyncing phasor to be used with an rdtable . Usage hs_phasor(tablesize,freq,c) : _ Where: tablesize : the table size freq : the frequency of the phasor (Hz) c : a clock signal, c>0 resets phase to 0 (os.)hsp_phasor Hardsyncing phasor with selectable phase to be used with an rdtable . Usage hsp_phasor(tablesize,freq,p,c) Where: tablesize : the table size freq : the frequency of the phasor (Hz) p : phase init (0 <= p <=1) c : a clock signal, c>0 resets phase to 0 (os.)oscsin Sine wave oscillator. oscsin is a standard Faust function. Usage oscsin(freq) : _ Where: freq : the frequency of the wave (Hz) (os.)hs_oscsin Sin lookup table with hardsyncing phase. Usage hs_oscsin(freq,c) : _ Where: freq : the fundamental frequency of the phasor c : a clock signal, c>0 resets phase to 0 (os.)osccos Cosine wave oscillator. Usage osccos(freq) : _ Where: freq : the frequency of the wave (Hz) (os.)oscp A sine wave generator with controllable phase. Usage oscp(freq,phase) : _ Where: freq : the frequency of the wave (Hz) phase : the phase in radian (os.)osci Interpolated phase sine wave oscillator. Usage osci(freq) : _ Where: freq : the frequency of the wave (Hz) LFOs Low-Frequency Oscillators (LFOs) have prefix lf_ (no aliasing suppression, which is not audible at LF). (os.)lf_imptrain Unit-amplitude low-frequency impulse train. lf_imptrain is a standard Faust function. Usage lf_imptrain(freq) : _ Where: freq : frequency in Hz (os.)lf_pulsetrainpos Unit-amplitude nonnegative LF pulse train, duty cycle between 0 and 1. Usage lf_pulsetrainpos(freq,duty) : _ Where: freq : frequency in Hz duty : duty cycle between 0 and 1 (os.)lf_pulsetrain Unit-amplitude zero-mean LF pulse train, duty cycle between 0 and 1. Usage lf_pulsetrain(freq,duty) : _ Where: freq : frequency in Hz duty : duty cycle between 0 and 1 (os.)lf_squarewavepos Positive LF square wave in [0,1] Usage lf_squarewavepos(freq) : _ Where: freq : frequency in Hz (os.)lf_squarewave Zero-mean unit-amplitude LF square wave. lf_squarewave is a standard Faust function. Usage lf_squarewave(freq) : _ Where: freq : frequency in Hz (os.)lf_trianglepos Positive unit-amplitude LF positive triangle wave. Usage lf_trianglepos(freq) : _ Where: freq : frequency in Hz (os.)lf_triangle Positive unit-amplitude LF triangle wave lf_triangle is a standard Faust function. Usage lf_triangle(freq) : _ Where: freq : frequency in Hz Low Frequency Sawtooths Sawtooth waveform oscillators for virtual analog synthesis et al. The 'simple' versions ( lf_rawsaw , lf_sawpos and saw1 ), are mere samplings of the ideal continuous-time (\"analog\") waveforms. While simple, the aliasing due to sampling is quite audible. The differentiated polynomial waveform family ( saw2 , sawN , and derived functions) do some extra processing to suppress aliasing (not audible for very low fundamental frequencies). According to Lehtonen et al. (JASA 2012), the aliasing of saw2 should be inaudible at fundamental frequencies below 2 kHz or so, for a 44.1 kHz sampling rate and 60 dB SPL presentation level; fundamentals 415 and below required no aliasing suppression (i.e., saw1 is ok). (os.)lf_rawsaw Simple sawtooth waveform oscillator between 0 and period in samples. Usage lf_rawsaw(periodsamps) Where: periodsamps : number of periods per samples (os.)lf_sawpos_phase Simple sawtooth waveform oscillator between 0 and 1 with phase control. Usage lf_sawpos_phase(phase,freq) Where: phase : phase freq : frequency (os.)lf_sawpos Simple sawtooth waveform oscillator between 0 and 1. Usage lf_sawpos(freq) Where: freq : frequency (os.)lf_sawpos_reset Simple sawtooth waveform oscillator between 0 and 1. with reset. Usage lf_sawpos_reset(freq,reset) Where: freq : frequency reset : reset the oscillator to 0 (os.)lf_sawpos_phase_reset Simple sawtooth waveform oscillator between 0 and 1. with phase control and reset. Usage lf_sawpos_phase_reset(freq,phase,reset) Where: freq : frequency phase : phase between 0 and 1 reset : reset the oscillator to 0 (os.)lf_saw Simple sawtooth waveform. lf_saw is a standard Faust function. Usage lf_saw(freq) Where: freq : frequency Bandlimited Sawtooth (os.)sawN Bandlimited Sawtooth sawN(N,freq) , sawNp , saw2dpw(freq) , saw2(freq) , saw3(freq) , saw4(freq) , saw5(freq) , saw6(freq) , sawtooth(freq) , saw2f2(freq) saw2f4(freq) Method 1 ( saw2 ) Polynomial Transition Regions (PTR) (for aliasing suppression). References Kleimola, J.; Valimaki, V., \"Reducing Aliasing from Synthetic Audio Signals Using Polynomial Transition Regions,\" in Signal Processing Letters, IEEE , vol.19, no.2, pp.67-70, Feb. 2012 https://aaltodoc.aalto.fi/bitstream/handle/123456789/7747/publication6.pdf?sequence=9 http://research.spa.aalto.fi/publications/papers/spl-ptr/ Method 2 ( sawN ) Differentiated Polynomial Waves (DPW) (for aliasing suppression). Reference \"Alias-Suppressed Oscillators based on Differentiated Polynomial Waveforms\", Vesa Valimaki, Juhan Nam, Julius Smith, and Jonathan Abel, IEEE Tr. Acoustics, Speech, and Language Processing (IEEE-ASLP), Vol. 18, no. 5, May 2010. Other Cases Correction-filtered versions of saw2 : saw2f2 , saw2f4 The correction filter compensates \"droop\" near half the sampling rate. See reference for sawN. Usage sawN(N,freq) : _ sawNp(N,freq,phase) : _ saw2dpw(freq) : _ saw2(freq) : _ saw3(freq) : _ // based on sawN saw4(freq) : _ // based on sawN saw5(freq) : _ // based on sawN saw6(freq) : _ // based on sawN sawtooth(freq) : _ // = saw2 saw2f2(freq) : _ saw2f4(freq) : _ Where: N : polynomial order freq : frequency in Hz phase : phase (os.)sawNp TODO: MarkDown doc in comments (os.)saw2dpw TODO: MarkDown doc in comments (os.)saw3 TODO: MarkDown doc in comments (os.)sawtooth Alias-free sawtooth wave. 2nd order interpolation (based on saw2 ). sawtooth is a standard Faust function. Usage sawtooth(freq) : _ Where: freq : frequency (os.)saw2f2 TODO: MarkDown doc in comments (os.)saw2f4 TODO: MarkDown doc in comments Bandlimited Pulse, Square, and Impulse Trains Bandlimited Pulse, Square, and Impulse Trains. pulsetrainN , pulsetrain , squareN , square , imptrain , imptrainN , triangle , triangleN All are zero-mean and meant to oscillate in the audio frequency range. Use simpler sample-rounded lf_* versions above for LFOs. Usage pulsetrainN(N,freq,duty) : _ pulsetrain(freq, duty) : _ // = pulsetrainN(2) squareN(N, freq) : _ square : _ // = squareN(2) imptrainN(N,freq) : _ imptrain : _ // = imptrainN(2) triangleN(N,freq) : _ triangle : _ // = triangleN(2) Where: N : polynomial order freq : frequency in Hz (os.)pulsetrainN TODO: MarkDown doc in comments (os.)pulsetrain Bandlimited pulse train oscillator. Based on pulsetrainN(2) . pulsetrain is a standard Faust function. Usage pulsetrain(freq, duty) : _ Where: freq : frequency duty : duty cycle between 0 and 1 (os.)squareN TODO: MarkDown doc in comments (os.)square Bandlimited square wave oscillator. Based on squareN(2) . square is a standard Faust function. Usage square(freq) : _ Where: freq : frequency (os.)impulse One-time impulse generated when the Faust process is started. impulse is a standard Faust function. Usage impulse : _ (os.)imptrainN TODO: MarkDown doc in comments (os.)imptrain Bandlimited impulse train generator. Based on imptrainN(2) . imptrain is a standard Faust function. Usage imptrain(freq) : _ Where: freq : frequency (os.)triangleN TODO: MarkDown doc in comments (os.)triangle Bandlimited triangle wave oscillator. Based on triangleN(2) . triangle is a standard Faust function. Usage triangle(freq) : _ Where: freq : frequency Filter-Based Oscillators Filter-Based Oscillators Usage osc[b|r|rs|rc|s|w](f), where f = frequency in Hz. References http://lac.linuxaudio.org/2012/download/lac12-slides-jos.pdf https://ccrma.stanford.edu/~jos/pdf/lac12-paper-jos.pdf (os.)oscb Sinusoidal oscillator based on the biquad. Usage oscb(freq) : _ Where: freq : frequency (os.)oscrq Sinusoidal (sine and cosine) oscillator based on 2D vector rotation, = undamped \"coupled-form\" resonator = lossless 2nd-order normalized ladder filter. Usage oscrq(freq) : _,_ Where: freq : frequency Reference https://ccrma.stanford.edu/~jos/pasp/Normalized_Scattering_Junctions.html (os.)oscrs Sinusoidal (sine) oscillator based on 2D vector rotation, = undamped \"coupled-form\" resonator = lossless 2nd-order normalized ladder filter. Usage oscrs(freq) : _ Where: freq : frequency Reference https://ccrma.stanford.edu/~jos/pasp/Normalized_Scattering_Junctions.html (os.)oscrc Sinusoidal (cosine) oscillator based on 2D vector rotation, = undamped \"coupled-form\" resonator = lossless 2nd-order normalized ladder filter. Usage oscrc(freq) : _ Where: freq : frequency Reference https://ccrma.stanford.edu/~jos/pasp/Normalized_Scattering_Junctions.html (os.)oscs Sinusoidal oscillator based on the state variable filter = undamped \"modified-coupled-form\" resonator = \"magic circle\" algorithm used in graphics. (os.)osc Default sine wave oscillator (same as oscsin ). osc is a standard Faust function. Usage osc(freq) : _ Where: freq : the frequency of the wave (Hz) Waveguide-Resonator-Based Oscillators Sinusoidal oscillator based on the waveguide resonator wgr . (os.)oscw Sinusoidal oscillator based on the waveguide resonator wgr . Unit-amplitude cosine oscillator. Usage oscwc(freq) : _ Where: freq : frequency Reference https://ccrma.stanford.edu/~jos/pasp/Digital_Waveguide_Oscillator.html (os.)oscws Sinusoidal oscillator based on the waveguide resonator wgr . Unit-amplitude sine oscillator. Usage oscws(freq) : _ Where: freq : frequency Reference https://ccrma.stanford.edu/~jos/pasp/Digital_Waveguide_Oscillator.html (os.)oscwq Sinusoidal oscillator based on the waveguide resonator wgr . Unit-amplitude cosine and sine (quadrature) oscillator. Usage oscwq(freq) : _ Where: freq : frequency Reference https://ccrma.stanford.edu/~jos/pasp/Digital_Waveguide_Oscillator.html (os.)oscw Sinusoidal oscillator based on the waveguide resonator wgr . Unit-amplitude cosine oscillator (default). Usage oscw(freq) : _ Where: freq : frequency Reference https://ccrma.stanford.edu/~jos/pasp/Digital_Waveguide_Oscillator.html Casio CZ Oscillators Oscillators that mimic some of the Casio CZ oscillators. There are two sets: - A set with an index parameter - A set with a res parameter The \"index oscillators\" outputs a sine wave at index=0 and gets brighter with a higher index. There are two versions of the \"index oscillators\": - with P appended to the name: is phase aligned with 'fund:sin' - without P appended to the name: has the phase of the original CZ oscillators The \"res oscillators\" have a resonant frequency. \"res\" is the frequency of resonance as a factor of the fundamental pitch. (os.)CZsaw Oscillator that mimics the Casio CZ saw oscillator CZsaw is a standard Faust function. Usage CZsaw(fund,index) : _ Where: fund : a saw-tooth waveform between 0 and 1 that the oscillator slaves to index : the brightness of the oscillator, 0 to 1. 0 = sine-wave, 1 = saw-wave (os.)CZsawP Oscillator that mimics the Casio CZ saw oscillator, with it's phase aligned to fund:sin . CZsawP is a standard Faust function. Usage CZsawP(fund,index) : _ Where: fund : a saw-tooth waveform between 0 and 1 that the oscillator slaves to index : the brightness of the oscillator, 0 to 1. 0 = sine-wave, 1 = saw-wave (os.)CZsquare Oscillator that mimics the Casio CZ square oscillator CZsquare is a standard Faust function. Usage CZsquare(fund,index) : _ Where: fund : a saw-tooth waveform between 0 and 1 that the oscillator slaves to index : the brightness of the oscillator, 0 to 1. 0 = sine-wave, 1 = square-wave (os.)CZsquareP Oscillator that mimics the Casio CZ square oscillator, with it's phase aligned to fund:sin . CZsquareP is a standard Faust function. Usage CZsquareP(fund,index) : _ Where: fund : a saw-tooth waveform between 0 and 1 that the oscillator slaves to index : the brightness of the oscillator, 0 to 1. 0 = sine-wave, 1 = square-wave (os.)CZpulse Oscillator that mimics the Casio CZ pulse oscillator CZpulse is a standard Faust function. Usage CZpulse(fund,index) : _ Where: fund : a saw-tooth waveform between 0 and 1 that the oscillator slaves to index : the brightness of the oscillator, 0 gives a sine-wave, 1 is closer to a pulse (os.)CZpulseP Oscillator that mimics the Casio CZ pulse oscillator, with it's phase aligned to fund:sin . CZpulseP is a standard Faust function. Usage CZpulseP(fund,index) : _ Where: fund : a saw-tooth waveform between 0 and 1 that the oscillator slaves to index : the brightness of the oscillator, 0 gives a sine-wave, 1 is closer to a pulse (os.)CZsinePulse Oscillator that mimics the Casio CZ sine/pulse oscillator CZsinePulse is a standard Faust function. Usage CZsinePulse(fund,index) : _ Where: fund : a saw-tooth waveform between 0 and 1 that the oscillator slaves to index : the brightness of the oscillator, 0 gives a sine-wave, 1 is a sine minus a pulse (os.)CZsinePulseP Oscillator that mimics the Casio CZ sine/pulse oscillator, with it's phase aligned to fund:sin . CZsinePulseP is a standard Faust function. Usage CZsinePulseP(fund,index) : _ Where: fund : a saw-tooth waveform between 0 and 1 that the oscillator slaves to index : the brightness of the oscillator, 0 gives a sine-wave, 1 is a sine minus a pulse (os.)CZhalfSine Oscillator that mimics the Casio CZ half sine oscillator CZhalfSine is a standard Faust function. Usage CZhalfSine(fund,index) : _ Where: fund : a saw-tooth waveform between 0 and 1 that the oscillator slaves to index : the brightness of the oscillator, 0 gives a sine-wave, 1 is somewhere between a saw and a square (os.)CZhalfSineP Oscillator that mimics the Casio CZ half sine oscillator, with it's phase aligned to fund:sin . CZhalfSineP is a standard Faust function. Usage CZhalfSineP(fund,index) : _ Where: fund : a saw-tooth waveform between 0 and 1 that the oscillator slaves to index : the brightness of the oscillator, 0 gives a sine-wave, 1 is somewhere between a saw and a square (os.)CZresSaw Oscillator that mimics the Casio CZ resonant saw-tooth oscillator CZresSaw is a standard Faust function. Usage CZresSaw(fund,res) : _ Where: fund : a saw-tooth waveform between 0 and 1 that the oscillator slaves to res : the frequency of resonance as a factor of the fundamental pitch. (os.)CZresTriangle Oscillator that mimics the Casio CZ resonant triangle oscillator CZresTriangle is a standard Faust function. Usage CZresTriangle(fund,res) : _ Where: fund : a saw-tooth waveform between 0 and 1 that the oscillator slaves to res : the frequency of resonance as a factor of the fundamental pitch. (os.)CZresTrap Oscillator that mimics the Casio CZ resonant trapeze oscillator CZresTrap is a standard Faust function. Usage CZresTrap(fund,res) : _ Where: fund : a saw-tooth waveform between 0 and 1 that the oscillator slaves to res : the frequency of resonance as a factor of the fundamental pitch. PolyBLEP-Based Oscillators (os.)polyblep PolyBLEP residual function - used for smoothing steps in the audio signal. Usage polyblep(Q, phase) : _ Where: Q : smoothing factor between 0 and 0.5. Determines how far from the ends of the phase interval the quadratic function is used. phase : normalised phase (between 0 and 1) (os.)polyblep_saw Sawtooth oscillator with suppressed aliasing (using polyBLEP). Usage polyblep_saw(f) : _ Where: f : frequency in Hz (os.)polyblep_square Square wave oscillator with suppressed aliasing (using polyBLEP). Usage polyblep_square(f) : _ Where: f : frequency in Hz (os.)polyblep_triangle Triangle wave oscillator with suppressed aliasing (using polyBLEP). Usage polyblep_triangle(f) : _ Where: f : frequency in Hz Filter-Based Oscillators (os.)quadosc Sinusoidal oscillator based on QuadOsc by Martin Vicanek. Usage quadosc(freq) : _ where freq : frequency in Hz Reference https://vicanek.de/articles/QuadOsc.pdf","title":" oscillators "},{"location":"libs/oscillators/#oscillatorslib","text":"This library contains a collection of sound generators. Its official prefix is os .","title":"oscillators.lib"},{"location":"libs/oscillators/#wave-table-based-oscillators","text":"","title":"Wave-Table-Based Oscillators"},{"location":"libs/oscillators/#ossinwaveform","text":"Sine waveform ready to use with a rdtable .","title":"(os.)sinwaveform"},{"location":"libs/oscillators/#usage","text":"sinwaveform(tablesize) : _ Where: tablesize : the table size","title":"Usage"},{"location":"libs/oscillators/#oscoswaveform","text":"Cosine waveform ready to use with a rdtable .","title":"(os.)coswaveform"},{"location":"libs/oscillators/#usage_1","text":"coswaveform(tablesize) : _ Where: tablesize : the table size","title":"Usage"},{"location":"libs/oscillators/#osphasor","text":"A simple phasor to be used with a rdtable . phasor is a standard Faust function.","title":"(os.)phasor"},{"location":"libs/oscillators/#usage_2","text":"phasor(tablesize,freq) : _ Where: tablesize : the table size freq : the frequency of the phasor (Hz)","title":"Usage"},{"location":"libs/oscillators/#oshs_phasor","text":"Hardsyncing phasor to be used with an rdtable .","title":"(os.)hs_phasor"},{"location":"libs/oscillators/#usage_3","text":"hs_phasor(tablesize,freq,c) : _ Where: tablesize : the table size freq : the frequency of the phasor (Hz) c : a clock signal, c>0 resets phase to 0","title":"Usage"},{"location":"libs/oscillators/#oshsp_phasor","text":"Hardsyncing phasor with selectable phase to be used with an rdtable .","title":"(os.)hsp_phasor"},{"location":"libs/oscillators/#usage_4","text":"hsp_phasor(tablesize,freq,p,c) Where: tablesize : the table size freq : the frequency of the phasor (Hz) p : phase init (0 <= p <=1) c : a clock signal, c>0 resets phase to 0","title":"Usage"},{"location":"libs/oscillators/#ososcsin","text":"Sine wave oscillator. oscsin is a standard Faust function.","title":"(os.)oscsin"},{"location":"libs/oscillators/#usage_5","text":"oscsin(freq) : _ Where: freq : the frequency of the wave (Hz)","title":"Usage"},{"location":"libs/oscillators/#oshs_oscsin","text":"Sin lookup table with hardsyncing phase.","title":"(os.)hs_oscsin"},{"location":"libs/oscillators/#usage_6","text":"hs_oscsin(freq,c) : _ Where: freq : the fundamental frequency of the phasor c : a clock signal, c>0 resets phase to 0","title":"Usage"},{"location":"libs/oscillators/#ososccos","text":"Cosine wave oscillator.","title":"(os.)osccos"},{"location":"libs/oscillators/#usage_7","text":"osccos(freq) : _ Where: freq : the frequency of the wave (Hz)","title":"Usage"},{"location":"libs/oscillators/#ososcp","text":"A sine wave generator with controllable phase.","title":"(os.)oscp"},{"location":"libs/oscillators/#usage_8","text":"oscp(freq,phase) : _ Where: freq : the frequency of the wave (Hz) phase : the phase in radian","title":"Usage"},{"location":"libs/oscillators/#ososci","text":"Interpolated phase sine wave oscillator.","title":"(os.)osci"},{"location":"libs/oscillators/#usage_9","text":"osci(freq) : _ Where: freq : the frequency of the wave (Hz)","title":"Usage"},{"location":"libs/oscillators/#lfos","text":"Low-Frequency Oscillators (LFOs) have prefix lf_ (no aliasing suppression, which is not audible at LF).","title":"LFOs"},{"location":"libs/oscillators/#oslf_imptrain","text":"Unit-amplitude low-frequency impulse train. lf_imptrain is a standard Faust function.","title":"(os.)lf_imptrain"},{"location":"libs/oscillators/#usage_10","text":"lf_imptrain(freq) : _ Where: freq : frequency in Hz","title":"Usage"},{"location":"libs/oscillators/#oslf_pulsetrainpos","text":"Unit-amplitude nonnegative LF pulse train, duty cycle between 0 and 1.","title":"(os.)lf_pulsetrainpos"},{"location":"libs/oscillators/#usage_11","text":"lf_pulsetrainpos(freq,duty) : _ Where: freq : frequency in Hz duty : duty cycle between 0 and 1","title":"Usage"},{"location":"libs/oscillators/#oslf_pulsetrain","text":"Unit-amplitude zero-mean LF pulse train, duty cycle between 0 and 1.","title":"(os.)lf_pulsetrain"},{"location":"libs/oscillators/#usage_12","text":"lf_pulsetrain(freq,duty) : _ Where: freq : frequency in Hz duty : duty cycle between 0 and 1","title":"Usage"},{"location":"libs/oscillators/#oslf_squarewavepos","text":"Positive LF square wave in [0,1]","title":"(os.)lf_squarewavepos"},{"location":"libs/oscillators/#usage_13","text":"lf_squarewavepos(freq) : _ Where: freq : frequency in Hz","title":"Usage"},{"location":"libs/oscillators/#oslf_squarewave","text":"Zero-mean unit-amplitude LF square wave. lf_squarewave is a standard Faust function.","title":"(os.)lf_squarewave"},{"location":"libs/oscillators/#usage_14","text":"lf_squarewave(freq) : _ Where: freq : frequency in Hz","title":"Usage"},{"location":"libs/oscillators/#oslf_trianglepos","text":"Positive unit-amplitude LF positive triangle wave.","title":"(os.)lf_trianglepos"},{"location":"libs/oscillators/#usage_15","text":"lf_trianglepos(freq) : _ Where: freq : frequency in Hz","title":"Usage"},{"location":"libs/oscillators/#oslf_triangle","text":"Positive unit-amplitude LF triangle wave lf_triangle is a standard Faust function.","title":"(os.)lf_triangle"},{"location":"libs/oscillators/#usage_16","text":"lf_triangle(freq) : _ Where: freq : frequency in Hz","title":"Usage"},{"location":"libs/oscillators/#low-frequency-sawtooths","text":"Sawtooth waveform oscillators for virtual analog synthesis et al. The 'simple' versions ( lf_rawsaw , lf_sawpos and saw1 ), are mere samplings of the ideal continuous-time (\"analog\") waveforms. While simple, the aliasing due to sampling is quite audible. The differentiated polynomial waveform family ( saw2 , sawN , and derived functions) do some extra processing to suppress aliasing (not audible for very low fundamental frequencies). According to Lehtonen et al. (JASA 2012), the aliasing of saw2 should be inaudible at fundamental frequencies below 2 kHz or so, for a 44.1 kHz sampling rate and 60 dB SPL presentation level; fundamentals 415 and below required no aliasing suppression (i.e., saw1 is ok).","title":"Low Frequency Sawtooths"},{"location":"libs/oscillators/#oslf_rawsaw","text":"Simple sawtooth waveform oscillator between 0 and period in samples.","title":"(os.)lf_rawsaw"},{"location":"libs/oscillators/#usage_17","text":"lf_rawsaw(periodsamps) Where: periodsamps : number of periods per samples","title":"Usage"},{"location":"libs/oscillators/#oslf_sawpos_phase","text":"Simple sawtooth waveform oscillator between 0 and 1 with phase control.","title":"(os.)lf_sawpos_phase"},{"location":"libs/oscillators/#usage_18","text":"lf_sawpos_phase(phase,freq) Where: phase : phase freq : frequency","title":"Usage"},{"location":"libs/oscillators/#oslf_sawpos","text":"Simple sawtooth waveform oscillator between 0 and 1.","title":"(os.)lf_sawpos"},{"location":"libs/oscillators/#usage_19","text":"lf_sawpos(freq) Where: freq : frequency","title":"Usage"},{"location":"libs/oscillators/#oslf_sawpos_reset","text":"Simple sawtooth waveform oscillator between 0 and 1. with reset.","title":"(os.)lf_sawpos_reset"},{"location":"libs/oscillators/#usage_20","text":"lf_sawpos_reset(freq,reset) Where: freq : frequency reset : reset the oscillator to 0","title":"Usage"},{"location":"libs/oscillators/#oslf_sawpos_phase_reset","text":"Simple sawtooth waveform oscillator between 0 and 1. with phase control and reset.","title":"(os.)lf_sawpos_phase_reset"},{"location":"libs/oscillators/#usage_21","text":"lf_sawpos_phase_reset(freq,phase,reset) Where: freq : frequency phase : phase between 0 and 1 reset : reset the oscillator to 0","title":"Usage"},{"location":"libs/oscillators/#oslf_saw","text":"Simple sawtooth waveform. lf_saw is a standard Faust function.","title":"(os.)lf_saw"},{"location":"libs/oscillators/#usage_22","text":"lf_saw(freq) Where: freq : frequency","title":"Usage"},{"location":"libs/oscillators/#bandlimited-sawtooth","text":"","title":"Bandlimited Sawtooth"},{"location":"libs/oscillators/#ossawn","text":"Bandlimited Sawtooth sawN(N,freq) , sawNp , saw2dpw(freq) , saw2(freq) , saw3(freq) , saw4(freq) , saw5(freq) , saw6(freq) , sawtooth(freq) , saw2f2(freq) saw2f4(freq)","title":"(os.)sawN"},{"location":"libs/oscillators/#method-1-saw2","text":"Polynomial Transition Regions (PTR) (for aliasing suppression).","title":"Method 1 (saw2)"},{"location":"libs/oscillators/#references","text":"Kleimola, J.; Valimaki, V., \"Reducing Aliasing from Synthetic Audio Signals Using Polynomial Transition Regions,\" in Signal Processing Letters, IEEE , vol.19, no.2, pp.67-70, Feb. 2012 https://aaltodoc.aalto.fi/bitstream/handle/123456789/7747/publication6.pdf?sequence=9 http://research.spa.aalto.fi/publications/papers/spl-ptr/","title":"References"},{"location":"libs/oscillators/#method-2-sawn","text":"Differentiated Polynomial Waves (DPW) (for aliasing suppression).","title":"Method 2 (sawN)"},{"location":"libs/oscillators/#reference","text":"\"Alias-Suppressed Oscillators based on Differentiated Polynomial Waveforms\", Vesa Valimaki, Juhan Nam, Julius Smith, and Jonathan Abel, IEEE Tr. Acoustics, Speech, and Language Processing (IEEE-ASLP), Vol. 18, no. 5, May 2010.","title":"Reference"},{"location":"libs/oscillators/#other-cases","text":"Correction-filtered versions of saw2 : saw2f2 , saw2f4 The correction filter compensates \"droop\" near half the sampling rate. See reference for sawN.","title":"Other Cases"},{"location":"libs/oscillators/#usage_23","text":"sawN(N,freq) : _ sawNp(N,freq,phase) : _ saw2dpw(freq) : _ saw2(freq) : _ saw3(freq) : _ // based on sawN saw4(freq) : _ // based on sawN saw5(freq) : _ // based on sawN saw6(freq) : _ // based on sawN sawtooth(freq) : _ // = saw2 saw2f2(freq) : _ saw2f4(freq) : _ Where: N : polynomial order freq : frequency in Hz phase : phase","title":"Usage"},{"location":"libs/oscillators/#ossawnp","text":"TODO: MarkDown doc in comments","title":"(os.)sawNp"},{"location":"libs/oscillators/#ossaw2dpw","text":"TODO: MarkDown doc in comments","title":"(os.)saw2dpw"},{"location":"libs/oscillators/#ossaw3","text":"TODO: MarkDown doc in comments","title":"(os.)saw3"},{"location":"libs/oscillators/#ossawtooth","text":"Alias-free sawtooth wave. 2nd order interpolation (based on saw2 ). sawtooth is a standard Faust function.","title":"(os.)sawtooth"},{"location":"libs/oscillators/#usage_24","text":"sawtooth(freq) : _ Where: freq : frequency","title":"Usage"},{"location":"libs/oscillators/#ossaw2f2","text":"TODO: MarkDown doc in comments","title":"(os.)saw2f2"},{"location":"libs/oscillators/#ossaw2f4","text":"TODO: MarkDown doc in comments","title":"(os.)saw2f4"},{"location":"libs/oscillators/#bandlimited-pulse-square-and-impulse-trains","text":"Bandlimited Pulse, Square, and Impulse Trains. pulsetrainN , pulsetrain , squareN , square , imptrain , imptrainN , triangle , triangleN All are zero-mean and meant to oscillate in the audio frequency range. Use simpler sample-rounded lf_* versions above for LFOs.","title":"Bandlimited Pulse, Square, and Impulse Trains"},{"location":"libs/oscillators/#usage_25","text":"pulsetrainN(N,freq,duty) : _ pulsetrain(freq, duty) : _ // = pulsetrainN(2) squareN(N, freq) : _ square : _ // = squareN(2) imptrainN(N,freq) : _ imptrain : _ // = imptrainN(2) triangleN(N,freq) : _ triangle : _ // = triangleN(2) Where: N : polynomial order freq : frequency in Hz","title":"Usage"},{"location":"libs/oscillators/#ospulsetrainn","text":"TODO: MarkDown doc in comments","title":"(os.)pulsetrainN"},{"location":"libs/oscillators/#ospulsetrain","text":"Bandlimited pulse train oscillator. Based on pulsetrainN(2) . pulsetrain is a standard Faust function.","title":"(os.)pulsetrain"},{"location":"libs/oscillators/#usage_26","text":"pulsetrain(freq, duty) : _ Where: freq : frequency duty : duty cycle between 0 and 1","title":"Usage"},{"location":"libs/oscillators/#ossquaren","text":"TODO: MarkDown doc in comments","title":"(os.)squareN"},{"location":"libs/oscillators/#ossquare","text":"Bandlimited square wave oscillator. Based on squareN(2) . square is a standard Faust function.","title":"(os.)square"},{"location":"libs/oscillators/#usage_27","text":"square(freq) : _ Where: freq : frequency","title":"Usage"},{"location":"libs/oscillators/#osimpulse","text":"One-time impulse generated when the Faust process is started. impulse is a standard Faust function.","title":"(os.)impulse"},{"location":"libs/oscillators/#usage_28","text":"impulse : _","title":"Usage"},{"location":"libs/oscillators/#osimptrainn","text":"TODO: MarkDown doc in comments","title":"(os.)imptrainN"},{"location":"libs/oscillators/#osimptrain","text":"Bandlimited impulse train generator. Based on imptrainN(2) . imptrain is a standard Faust function.","title":"(os.)imptrain"},{"location":"libs/oscillators/#usage_29","text":"imptrain(freq) : _ Where: freq : frequency","title":"Usage"},{"location":"libs/oscillators/#ostrianglen","text":"TODO: MarkDown doc in comments","title":"(os.)triangleN"},{"location":"libs/oscillators/#ostriangle","text":"Bandlimited triangle wave oscillator. Based on triangleN(2) . triangle is a standard Faust function.","title":"(os.)triangle"},{"location":"libs/oscillators/#usage_30","text":"triangle(freq) : _ Where: freq : frequency","title":"Usage"},{"location":"libs/oscillators/#filter-based-oscillators","text":"Filter-Based Oscillators","title":"Filter-Based Oscillators"},{"location":"libs/oscillators/#usage_31","text":"osc[b|r|rs|rc|s|w](f), where f = frequency in Hz.","title":"Usage"},{"location":"libs/oscillators/#references_1","text":"http://lac.linuxaudio.org/2012/download/lac12-slides-jos.pdf https://ccrma.stanford.edu/~jos/pdf/lac12-paper-jos.pdf","title":"References"},{"location":"libs/oscillators/#ososcb","text":"Sinusoidal oscillator based on the biquad.","title":"(os.)oscb"},{"location":"libs/oscillators/#usage_32","text":"oscb(freq) : _ Where: freq : frequency","title":"Usage"},{"location":"libs/oscillators/#ososcrq","text":"Sinusoidal (sine and cosine) oscillator based on 2D vector rotation, = undamped \"coupled-form\" resonator = lossless 2nd-order normalized ladder filter.","title":"(os.)oscrq"},{"location":"libs/oscillators/#usage_33","text":"oscrq(freq) : _,_ Where: freq : frequency","title":"Usage"},{"location":"libs/oscillators/#reference_1","text":"https://ccrma.stanford.edu/~jos/pasp/Normalized_Scattering_Junctions.html","title":"Reference"},{"location":"libs/oscillators/#ososcrs","text":"Sinusoidal (sine) oscillator based on 2D vector rotation, = undamped \"coupled-form\" resonator = lossless 2nd-order normalized ladder filter.","title":"(os.)oscrs"},{"location":"libs/oscillators/#usage_34","text":"oscrs(freq) : _ Where: freq : frequency","title":"Usage"},{"location":"libs/oscillators/#reference_2","text":"https://ccrma.stanford.edu/~jos/pasp/Normalized_Scattering_Junctions.html","title":"Reference"},{"location":"libs/oscillators/#ososcrc","text":"Sinusoidal (cosine) oscillator based on 2D vector rotation, = undamped \"coupled-form\" resonator = lossless 2nd-order normalized ladder filter.","title":"(os.)oscrc"},{"location":"libs/oscillators/#usage_35","text":"oscrc(freq) : _ Where: freq : frequency","title":"Usage"},{"location":"libs/oscillators/#reference_3","text":"https://ccrma.stanford.edu/~jos/pasp/Normalized_Scattering_Junctions.html","title":"Reference"},{"location":"libs/oscillators/#ososcs","text":"Sinusoidal oscillator based on the state variable filter = undamped \"modified-coupled-form\" resonator = \"magic circle\" algorithm used in graphics.","title":"(os.)oscs"},{"location":"libs/oscillators/#ososc","text":"Default sine wave oscillator (same as oscsin ). osc is a standard Faust function.","title":"(os.)osc"},{"location":"libs/oscillators/#usage_36","text":"osc(freq) : _ Where: freq : the frequency of the wave (Hz)","title":"Usage"},{"location":"libs/oscillators/#waveguide-resonator-based-oscillators","text":"Sinusoidal oscillator based on the waveguide resonator wgr .","title":"Waveguide-Resonator-Based Oscillators"},{"location":"libs/oscillators/#ososcw","text":"Sinusoidal oscillator based on the waveguide resonator wgr . Unit-amplitude cosine oscillator.","title":"(os.)oscw"},{"location":"libs/oscillators/#usage_37","text":"oscwc(freq) : _ Where: freq : frequency","title":"Usage"},{"location":"libs/oscillators/#reference_4","text":"https://ccrma.stanford.edu/~jos/pasp/Digital_Waveguide_Oscillator.html","title":"Reference"},{"location":"libs/oscillators/#ososcws","text":"Sinusoidal oscillator based on the waveguide resonator wgr . Unit-amplitude sine oscillator.","title":"(os.)oscws"},{"location":"libs/oscillators/#usage_38","text":"oscws(freq) : _ Where: freq : frequency","title":"Usage"},{"location":"libs/oscillators/#reference_5","text":"https://ccrma.stanford.edu/~jos/pasp/Digital_Waveguide_Oscillator.html","title":"Reference"},{"location":"libs/oscillators/#ososcwq","text":"Sinusoidal oscillator based on the waveguide resonator wgr . Unit-amplitude cosine and sine (quadrature) oscillator.","title":"(os.)oscwq"},{"location":"libs/oscillators/#usage_39","text":"oscwq(freq) : _ Where: freq : frequency","title":"Usage"},{"location":"libs/oscillators/#reference_6","text":"https://ccrma.stanford.edu/~jos/pasp/Digital_Waveguide_Oscillator.html","title":"Reference"},{"location":"libs/oscillators/#ososcw_1","text":"Sinusoidal oscillator based on the waveguide resonator wgr . Unit-amplitude cosine oscillator (default).","title":"(os.)oscw"},{"location":"libs/oscillators/#usage_40","text":"oscw(freq) : _ Where: freq : frequency","title":"Usage"},{"location":"libs/oscillators/#reference_7","text":"https://ccrma.stanford.edu/~jos/pasp/Digital_Waveguide_Oscillator.html","title":"Reference"},{"location":"libs/oscillators/#casio-cz-oscillators","text":"Oscillators that mimic some of the Casio CZ oscillators. There are two sets: - A set with an index parameter - A set with a res parameter The \"index oscillators\" outputs a sine wave at index=0 and gets brighter with a higher index. There are two versions of the \"index oscillators\": - with P appended to the name: is phase aligned with 'fund:sin' - without P appended to the name: has the phase of the original CZ oscillators The \"res oscillators\" have a resonant frequency. \"res\" is the frequency of resonance as a factor of the fundamental pitch.","title":"Casio CZ Oscillators"},{"location":"libs/oscillators/#osczsaw","text":"Oscillator that mimics the Casio CZ saw oscillator CZsaw is a standard Faust function.","title":"(os.)CZsaw"},{"location":"libs/oscillators/#usage_41","text":"CZsaw(fund,index) : _ Where: fund : a saw-tooth waveform between 0 and 1 that the oscillator slaves to index : the brightness of the oscillator, 0 to 1. 0 = sine-wave, 1 = saw-wave","title":"Usage"},{"location":"libs/oscillators/#osczsawp","text":"Oscillator that mimics the Casio CZ saw oscillator, with it's phase aligned to fund:sin . CZsawP is a standard Faust function.","title":"(os.)CZsawP"},{"location":"libs/oscillators/#usage_42","text":"CZsawP(fund,index) : _ Where: fund : a saw-tooth waveform between 0 and 1 that the oscillator slaves to index : the brightness of the oscillator, 0 to 1. 0 = sine-wave, 1 = saw-wave","title":"Usage"},{"location":"libs/oscillators/#osczsquare","text":"Oscillator that mimics the Casio CZ square oscillator CZsquare is a standard Faust function.","title":"(os.)CZsquare"},{"location":"libs/oscillators/#usage_43","text":"CZsquare(fund,index) : _ Where: fund : a saw-tooth waveform between 0 and 1 that the oscillator slaves to index : the brightness of the oscillator, 0 to 1. 0 = sine-wave, 1 = square-wave","title":"Usage"},{"location":"libs/oscillators/#osczsquarep","text":"Oscillator that mimics the Casio CZ square oscillator, with it's phase aligned to fund:sin . CZsquareP is a standard Faust function.","title":"(os.)CZsquareP"},{"location":"libs/oscillators/#usage_44","text":"CZsquareP(fund,index) : _ Where: fund : a saw-tooth waveform between 0 and 1 that the oscillator slaves to index : the brightness of the oscillator, 0 to 1. 0 = sine-wave, 1 = square-wave","title":"Usage"},{"location":"libs/oscillators/#osczpulse","text":"Oscillator that mimics the Casio CZ pulse oscillator CZpulse is a standard Faust function.","title":"(os.)CZpulse"},{"location":"libs/oscillators/#usage_45","text":"CZpulse(fund,index) : _ Where: fund : a saw-tooth waveform between 0 and 1 that the oscillator slaves to index : the brightness of the oscillator, 0 gives a sine-wave, 1 is closer to a pulse","title":"Usage"},{"location":"libs/oscillators/#osczpulsep","text":"Oscillator that mimics the Casio CZ pulse oscillator, with it's phase aligned to fund:sin . CZpulseP is a standard Faust function.","title":"(os.)CZpulseP"},{"location":"libs/oscillators/#usage_46","text":"CZpulseP(fund,index) : _ Where: fund : a saw-tooth waveform between 0 and 1 that the oscillator slaves to index : the brightness of the oscillator, 0 gives a sine-wave, 1 is closer to a pulse","title":"Usage"},{"location":"libs/oscillators/#osczsinepulse","text":"Oscillator that mimics the Casio CZ sine/pulse oscillator CZsinePulse is a standard Faust function.","title":"(os.)CZsinePulse"},{"location":"libs/oscillators/#usage_47","text":"CZsinePulse(fund,index) : _ Where: fund : a saw-tooth waveform between 0 and 1 that the oscillator slaves to index : the brightness of the oscillator, 0 gives a sine-wave, 1 is a sine minus a pulse","title":"Usage"},{"location":"libs/oscillators/#osczsinepulsep","text":"Oscillator that mimics the Casio CZ sine/pulse oscillator, with it's phase aligned to fund:sin . CZsinePulseP is a standard Faust function.","title":"(os.)CZsinePulseP"},{"location":"libs/oscillators/#usage_48","text":"CZsinePulseP(fund,index) : _ Where: fund : a saw-tooth waveform between 0 and 1 that the oscillator slaves to index : the brightness of the oscillator, 0 gives a sine-wave, 1 is a sine minus a pulse","title":"Usage"},{"location":"libs/oscillators/#osczhalfsine","text":"Oscillator that mimics the Casio CZ half sine oscillator CZhalfSine is a standard Faust function.","title":"(os.)CZhalfSine"},{"location":"libs/oscillators/#usage_49","text":"CZhalfSine(fund,index) : _ Where: fund : a saw-tooth waveform between 0 and 1 that the oscillator slaves to index : the brightness of the oscillator, 0 gives a sine-wave, 1 is somewhere between a saw and a square","title":"Usage"},{"location":"libs/oscillators/#osczhalfsinep","text":"Oscillator that mimics the Casio CZ half sine oscillator, with it's phase aligned to fund:sin . CZhalfSineP is a standard Faust function.","title":"(os.)CZhalfSineP"},{"location":"libs/oscillators/#usage_50","text":"CZhalfSineP(fund,index) : _ Where: fund : a saw-tooth waveform between 0 and 1 that the oscillator slaves to index : the brightness of the oscillator, 0 gives a sine-wave, 1 is somewhere between a saw and a square","title":"Usage"},{"location":"libs/oscillators/#osczressaw","text":"Oscillator that mimics the Casio CZ resonant saw-tooth oscillator CZresSaw is a standard Faust function.","title":"(os.)CZresSaw"},{"location":"libs/oscillators/#usage_51","text":"CZresSaw(fund,res) : _ Where: fund : a saw-tooth waveform between 0 and 1 that the oscillator slaves to res : the frequency of resonance as a factor of the fundamental pitch.","title":"Usage"},{"location":"libs/oscillators/#osczrestriangle","text":"Oscillator that mimics the Casio CZ resonant triangle oscillator CZresTriangle is a standard Faust function.","title":"(os.)CZresTriangle"},{"location":"libs/oscillators/#usage_52","text":"CZresTriangle(fund,res) : _ Where: fund : a saw-tooth waveform between 0 and 1 that the oscillator slaves to res : the frequency of resonance as a factor of the fundamental pitch.","title":"Usage"},{"location":"libs/oscillators/#osczrestrap","text":"Oscillator that mimics the Casio CZ resonant trapeze oscillator CZresTrap is a standard Faust function.","title":"(os.)CZresTrap"},{"location":"libs/oscillators/#usage_53","text":"CZresTrap(fund,res) : _ Where: fund : a saw-tooth waveform between 0 and 1 that the oscillator slaves to res : the frequency of resonance as a factor of the fundamental pitch.","title":"Usage"},{"location":"libs/oscillators/#polyblep-based-oscillators","text":"","title":"PolyBLEP-Based Oscillators"},{"location":"libs/oscillators/#ospolyblep","text":"PolyBLEP residual function - used for smoothing steps in the audio signal.","title":"(os.)polyblep"},{"location":"libs/oscillators/#usage_54","text":"polyblep(Q, phase) : _ Where: Q : smoothing factor between 0 and 0.5. Determines how far from the ends of the phase interval the quadratic function is used. phase : normalised phase (between 0 and 1)","title":"Usage"},{"location":"libs/oscillators/#ospolyblep_saw","text":"Sawtooth oscillator with suppressed aliasing (using polyBLEP).","title":"(os.)polyblep_saw"},{"location":"libs/oscillators/#usage_55","text":"polyblep_saw(f) : _ Where: f : frequency in Hz","title":"Usage"},{"location":"libs/oscillators/#ospolyblep_square","text":"Square wave oscillator with suppressed aliasing (using polyBLEP).","title":"(os.)polyblep_square"},{"location":"libs/oscillators/#usage_56","text":"polyblep_square(f) : _ Where: f : frequency in Hz","title":"Usage"},{"location":"libs/oscillators/#ospolyblep_triangle","text":"Triangle wave oscillator with suppressed aliasing (using polyBLEP).","title":"(os.)polyblep_triangle"},{"location":"libs/oscillators/#usage_57","text":"polyblep_triangle(f) : _ Where: f : frequency in Hz","title":"Usage"},{"location":"libs/oscillators/#filter-based-oscillators_1","text":"","title":"Filter-Based Oscillators"},{"location":"libs/oscillators/#osquadosc","text":"Sinusoidal oscillator based on QuadOsc by Martin Vicanek.","title":"(os.)quadosc"},{"location":"libs/oscillators/#usage_58","text":"quadosc(freq) : _ where freq : frequency in Hz","title":"Usage"},{"location":"libs/oscillators/#reference_8","text":"https://vicanek.de/articles/QuadOsc.pdf","title":"Reference"},{"location":"libs/phaflangers/","text":"phaflangers.lib A library of phasor and flanger effects. Its official prefix is pf . Functions Reference (pf.)flanger_mono Mono flanging effect. Usage: _ : flanger_mono(dmax,curdel,depth,fb,invert) : _; Where: dmax : maximum delay-line length (power of 2) - 10 ms typical curdel : current dynamic delay (not to exceed dmax) depth : effect strength between 0 and 1 (1 typical) fb : feedback gain between 0 and 1 (0 typical) invert : 0 for normal, 1 to invert sign of flanging sum Reference https://ccrma.stanford.edu/~jos/pasp/Flanging.html (pf.)flanger_stereo Stereo flanging effect. flanger_stereo is a standard Faust function. Usage: _,_ : flanger_stereo(dmax,curdel1,curdel2,depth,fb,invert) : _,_; Where: dmax : maximum delay-line length (power of 2) - 10 ms typical curdel : current dynamic delay (not to exceed dmax) depth : effect strength between 0 and 1 (1 typical) fb : feedback gain between 0 and 1 (0 typical) invert : 0 for normal, 1 to invert sign of flanging sum Reference https://ccrma.stanford.edu/~jos/pasp/Flanging.html (pf.)phaser2_mono Mono phasing effect. Phaser _ : phaser2_mono(Notches,phase,width,frqmin,fratio,frqmax,speed,depth,fb,invert) : _; Where: Notches : number of spectral notches (MACRO ARGUMENT - not a signal) phase : phase of the oscillator (0-1) width : approximate width of spectral notches in Hz frqmin : approximate minimum frequency of first spectral notch in Hz fratio : ratio of adjacent notch frequencies frqmax : approximate maximum frequency of first spectral notch in Hz speed : LFO frequency in Hz (rate of periodic notch sweep cycles) depth : effect strength between 0 and 1 (1 typical) (aka \"intensity\") when depth=2, \"vibrato mode\" is obtained (pure allpass chain) fb : feedback gain between -1 and 1 (0 typical) invert : 0 for normal, 1 to invert sign of flanging sum Reference: https://ccrma.stanford.edu/~jos/pasp/Phasing.html http://www.geofex.com/Article_Folders/phasers/phase.html 'An Allpass Approach to Digital Phasing and Flanging', Julius O. Smith III, CCRMA Tech. Report STANM21: https://ccrma.stanford.edu/STANM/stanms/stanm21/ (pf.)phaser2_stereo Stereo phasing effect. phaser2_stereo is a standard Faust function. Phaser _ : phaser2_stereo(Notches,phase,width,frqmin,fratio,frqmax,speed,depth,fb,invert) : _; Where: Notches : number of spectral notches (MACRO ARGUMENT - not a signal) phase : phase of the oscillator (0-1) width : approximate width of spectral notches in Hz frqmin : approximate minimum frequency of first spectral notch in Hz fratio : ratio of adjacent notch frequencies frqmax : approximate maximum frequency of first spectral notch in Hz speed : LFO frequency in Hz (rate of periodic notch sweep cycles) depth : effect strength between 0 and 1 (1 typical) (aka \"intensity\") when depth=2, \"vibrato mode\" is obtained (pure allpass chain) fb : feedback gain between -1 and 1 (0 typical) invert : 0 for normal, 1 to invert sign of flanging sum Reference: https://ccrma.stanford.edu/~jos/pasp/Phasing.html http://www.geofex.com/Article_Folders/phasers/phase.html 'An Allpass Approach to Digital Phasing and Flanging', Julius O. Smith III, CCRMA Tech. Report STANM21: https://ccrma.stanford.edu/STANM/stanms/stanm21/","title":" phaflangers "},{"location":"libs/phaflangers/#phaflangerslib","text":"A library of phasor and flanger effects. Its official prefix is pf .","title":"phaflangers.lib"},{"location":"libs/phaflangers/#functions-reference","text":"","title":"Functions Reference"},{"location":"libs/phaflangers/#pfflanger_mono","text":"Mono flanging effect.","title":"(pf.)flanger_mono"},{"location":"libs/phaflangers/#usage","text":"_ : flanger_mono(dmax,curdel,depth,fb,invert) : _; Where: dmax : maximum delay-line length (power of 2) - 10 ms typical curdel : current dynamic delay (not to exceed dmax) depth : effect strength between 0 and 1 (1 typical) fb : feedback gain between 0 and 1 (0 typical) invert : 0 for normal, 1 to invert sign of flanging sum","title":"Usage:"},{"location":"libs/phaflangers/#reference","text":"https://ccrma.stanford.edu/~jos/pasp/Flanging.html","title":"Reference"},{"location":"libs/phaflangers/#pfflanger_stereo","text":"Stereo flanging effect. flanger_stereo is a standard Faust function.","title":"(pf.)flanger_stereo"},{"location":"libs/phaflangers/#usage_1","text":"_,_ : flanger_stereo(dmax,curdel1,curdel2,depth,fb,invert) : _,_; Where: dmax : maximum delay-line length (power of 2) - 10 ms typical curdel : current dynamic delay (not to exceed dmax) depth : effect strength between 0 and 1 (1 typical) fb : feedback gain between 0 and 1 (0 typical) invert : 0 for normal, 1 to invert sign of flanging sum","title":"Usage:"},{"location":"libs/phaflangers/#reference_1","text":"https://ccrma.stanford.edu/~jos/pasp/Flanging.html","title":"Reference"},{"location":"libs/phaflangers/#pfphaser2_mono","text":"Mono phasing effect.","title":"(pf.)phaser2_mono"},{"location":"libs/phaflangers/#phaser","text":"_ : phaser2_mono(Notches,phase,width,frqmin,fratio,frqmax,speed,depth,fb,invert) : _; Where: Notches : number of spectral notches (MACRO ARGUMENT - not a signal) phase : phase of the oscillator (0-1) width : approximate width of spectral notches in Hz frqmin : approximate minimum frequency of first spectral notch in Hz fratio : ratio of adjacent notch frequencies frqmax : approximate maximum frequency of first spectral notch in Hz speed : LFO frequency in Hz (rate of periodic notch sweep cycles) depth : effect strength between 0 and 1 (1 typical) (aka \"intensity\") when depth=2, \"vibrato mode\" is obtained (pure allpass chain) fb : feedback gain between -1 and 1 (0 typical) invert : 0 for normal, 1 to invert sign of flanging sum Reference: https://ccrma.stanford.edu/~jos/pasp/Phasing.html http://www.geofex.com/Article_Folders/phasers/phase.html 'An Allpass Approach to Digital Phasing and Flanging', Julius O. Smith III, CCRMA Tech. Report STANM21: https://ccrma.stanford.edu/STANM/stanms/stanm21/","title":"Phaser"},{"location":"libs/phaflangers/#pfphaser2_stereo","text":"Stereo phasing effect. phaser2_stereo is a standard Faust function.","title":"(pf.)phaser2_stereo"},{"location":"libs/phaflangers/#phaser_1","text":"_ : phaser2_stereo(Notches,phase,width,frqmin,fratio,frqmax,speed,depth,fb,invert) : _; Where: Notches : number of spectral notches (MACRO ARGUMENT - not a signal) phase : phase of the oscillator (0-1) width : approximate width of spectral notches in Hz frqmin : approximate minimum frequency of first spectral notch in Hz fratio : ratio of adjacent notch frequencies frqmax : approximate maximum frequency of first spectral notch in Hz speed : LFO frequency in Hz (rate of periodic notch sweep cycles) depth : effect strength between 0 and 1 (1 typical) (aka \"intensity\") when depth=2, \"vibrato mode\" is obtained (pure allpass chain) fb : feedback gain between -1 and 1 (0 typical) invert : 0 for normal, 1 to invert sign of flanging sum Reference: https://ccrma.stanford.edu/~jos/pasp/Phasing.html http://www.geofex.com/Article_Folders/phasers/phase.html 'An Allpass Approach to Digital Phasing and Flanging', Julius O. Smith III, CCRMA Tech. Report STANM21: https://ccrma.stanford.edu/STANM/stanms/stanm21/","title":"Phaser"},{"location":"libs/physmodels/","text":"physmodels.lib Faust physical modeling library. Its official prefix is pm . This library provides an environment to facilitate physical modeling of musical instruments. It contains dozens of functions implementing low and high level elements going from a simple waveguide to fully operational models with built-in UI, etc. It is organized as follows: Global Variables : useful pre-defined variables for physical modeling (e.g., speed of sound, etc.). Conversion Tools : conversion functions specific to physical modeling (e.g., length to frequency, etc.). Bidirectional Utilities : functions to create bidirectional block diagrams for physical modeling. Basic Elements : waveguides, specific types of filters, etc. String Instruments : various types of strings (e.g., steel, nylon, etc.), bridges, guitars, etc. Bowed String Instruments : parts and models specific to bowed string instruments (e.g., bows, bridges, violins, etc.). Wind Instrument : parts and models specific to wind string instruments (e.g., reeds, mouthpieces, flutes, clarinets, etc.). Exciters : pluck generators, \"blowers\", etc. Modal Percussions : percussion instruments based on modal models. Vocal Synthesis : functions for various vocal synthesis techniques (e.g., fof, source/filter, etc.) and vocal synthesizers. Misc Functions : any other functions that don't fit in the previous category (e.g., nonlinear filters, etc.). This library is part of the Faust Physical Modeling ToolKit. More information on how to use this library can be found on this page: * https://ccrma.stanford.edu/~rmichon/pmFaust . Tutorials on how to make physical models of musical instruments using Faust can be found here as well. Global Variables Useful pre-defined variables for physical modeling. (pm.)speedOfSound Speed of sound in meters per second (340m/s). (pm.)maxLength The default maximum length (3) in meters of strings and tubes used in this library. This variable should be overriden to allow longer strings or tubes. Conversion Tools Useful conversion tools for physical modeling. (pm.)f2l Frequency to length in meters. Usage f2l(freq) : distanceInMeters Where: freq : the frequency (pm.)l2f Length in meters to frequency. Usage l2f(length) : freq Where: length : length/distance in meters (pm.)l2s Length in meters to number of samples. Usage l2s(l) : numberOfSamples Where: l : length in meters Bidirectional Utilities Set of fundamental functions to create bi-directional block diagrams in Faust. These elements are used as the basis of this library to connect high level elements (e.g., mouthpieces, strings, bridge, instrument body, etc.). Each block has 3 inputs and 3 outputs. The first input/output carry left going waves, the second input/output carry right going waves, and the third input/output is used to carry any potential output signal to the end of the algorithm. (pm.)basicBlock Empty bidirectional block to be used with chain : 3 signals ins and 3 signals out. Usage chain(basicBlock : basicBlock : etc.) (pm.)chain Creates a chain of bidirectional blocks. Blocks must have 3 inputs and outputs. The first input/output carry left going waves, the second input/output carry right going waves, and the third input/output is used to carry any potential output signal to the end of the algorithm. The implied one sample delay created by the ~ operator is generalized to the left and right going waves. Thus, n blocks in chain() will add an n samples delay to both left and right going waves. Usage leftGoingWaves,rightGoingWaves,mixedOutput : chain( A : B ) : leftGoingWaves,rightGoingWaves,mixedOutput with{ A = _,_,_; }; (pm.)inLeftWave Adds a signal to left going waves anywhere in a chain of blocks. Usage model(x) = chain(A : inLeftWave(x) : B) Where A and B are bidirectional blocks and x is the signal added to left going waves in that chain. (pm.)inRightWave Adds a signal to right going waves anywhere in a chain of blocks. Usage model(x) = chain(A : inRightWave(x) : B) Where A and B are bidirectional blocks and x is the signal added to right going waves in that chain. (pm.)in Adds a signal to left and right going waves anywhere in a chain of blocks. Usage model(x) = chain(A : in(x) : B) Where A and B are bidirectional blocks and x is the signal added to left and right going waves in that chain. (pm.)outLeftWave Sends the signal of left going waves to the output channel of the chain . Usage chain(A : outLeftWave : B) Where A and B are bidirectional blocks. (pm.)outRightWave Sends the signal of right going waves to the output channel of the chain . Usage chain(A : outRightWave : B) Where A and B are bidirectional blocks. (pm.)out Sends the signal of right and left going waves to the output channel of the chain . Usage chain(A : out : B) Where A and B are bidirectional blocks. (pm.)terminations Creates terminations on both sides of a chain without closing the inputs and outputs of the bidirectional signals chain. As for chain , this function adds a 1 sample delay to the bidirectional signal, both ways. Of course, this function can be nested within a chain . Usage terminations(a,b,c) with{ }; (pm.)lTermination Creates a termination on the left side of a chain without closing the inputs and outputs of the bidirectional signals chain. This function adds a 1 sample delay near the termination and can be nested within another chain . Usage lTerminations(a,b) with{ }; (pm.)rTermination Creates a termination on the right side of a chain without closing the inputs and outputs of the bidirectional signals chain. This function adds a 1 sample delay near the termination and can be nested within another chain . Usage rTerminations(b,c) with{ }; (pm.)closeIns Closes the inputs of a bidirectional chain in all directions. Usage closeIns : chain(...) : _,_,_ (pm.)closeOuts Closes the outputs of a bidirectional chain in all directions except for the main signal output (3d output). Usage _,_,_ : chain(...) : _ (pm.)endChain Closes the inputs and outputs of a bidirectional chain in all directions except for the main signal output (3d output). Usage endChain(chain(...)) : _ Basic Elements Basic elements for physical modeling (e.g., waveguides, specific filters, etc.). (pm.)waveguideN A series of waveguide functions based on various types of delays (see fdelay[n] ). List of functions waveguideUd : unit delay waveguide waveguideFd : fractional delay waveguide waveguideFd2 : second order fractional delay waveguide waveguideFd4 : fourth order fractional delay waveguide Usage chain(A : waveguideUd(nMax,n) : B) Where: nMax : the maximum length of the delays in the waveguide n : the length of the delay lines in samples. (pm.)waveguide Standard pm.lib waveguide (based on waveguideFd4 ). Usage chain(A : waveguide(nMax,n) : B) Where: nMax : the maximum length of the delays in the waveguide n : the length of the delay lines in samples. (pm.)bridgeFilter Generic two zeros bridge FIR filter (as implemented in the STK ) that can be used to implement the reflectance violin, guitar, etc. bridges. Usage _ : bridge(brightness,absorption) : _ Where: brightness : controls the damping of high frequencies (0-1) absorption : controls the absorption of the brige and thus the t60 of the string plugged to it (0-1) (1 = 20 seconds) (pm.)modeFilter Resonant bandpass filter that can be used to implement a single resonance (mode). Usage _ : modeFilter(freq,t60,gain) : _ Where: freq : mode frequency t60 : mode resonance duration (in seconds) gain : mode gain (0-1) String Instruments Low and high level string instruments parts. Most of the elements in this section can be used in a bidirectional chain. (pm.)stringSegment A string segment without terminations (just a simple waveguide). Usage chain(A : stringSegment(maxLength,length) : B) Where: maxLength : the maximum length of the string in meters (should be static) length : the length of the string in meters (pm.)openString A bidirectional block implementing a basic \"generic\" string with a selectable excitation position. Lowpass filters are built-in and allow to simulate the effect of dispersion on the sound and thus to change the \"stiffness\" of the string. Usage chain(... : openString(length,stiffness,pluckPosition,excitation) : ...) Where: length : the length of the string in meters stiffness : the stiffness of the string (0-1) (1 for max stiffness) pluckPosition : excitation position (0-1) (1 is bottom) excitation : the excitation signal (pm.)nylonString A bidirectional block implementing a basic nylon string with selectable excitation position. This element is based on openString and has a fix stiffness corresponding to that of a nylon string. Usage chain(... : nylonString(length,pluckPosition,excitation) : ...) Where: length : the length of the string in meters pluckPosition : excitation position (0-1) (1 is bottom) excitation : the excitation signal (pm.)steelString A bidirectional block implementing a basic steel string with selectable excitation position. This element is based on openString and has a fix stiffness corresponding to that of a steel string. Usage chain(... : steelString(length,pluckPosition,excitation) : ...) Where: length : the length of the string in meters pluckPosition : excitation position (0-1) (1 is bottom) excitation : the excitation signal (pm.)openStringPick A bidirectional block implementing a \"generic\" string with selectable excitation position. It also has a built-in pickup whose position is the same as the excitation position. Thus, moving the excitation position will also move the pickup. Usage chain(... : openStringPick(length,stiffness,pluckPosition,excitation) : ...) Where: length : the length of the string in meters stiffness : the stiffness of the string (0-1) (1 for max stiffness) pluckPosition : excitation position (0-1) (1 is bottom) excitation : the excitation signal (pm.)openStringPickUp A bidirectional block implementing a \"generic\" string with selectable excitation position and stiffness. It also has a built-in pickup whose position can be independenly selected. The only constraint is that the pickup has to be placed after the excitation position. Usage chain(... : openStringPickUp(length,stiffness,pluckPosition,excitation) : ...) Where: length : the length of the string in meters stiffness : the stiffness of the string (0-1) (1 for max stiffness) pluckPosition : pluck position between the top of the string and the pickup (0-1) (1 for same as pickup position) pickupPosition : position of the pickup on the string (0-1) (1 is bottom) excitation : the excitation signal (pm.)openStringPickDown A bidirectional block implementing a \"generic\" string with selectable excitation position and stiffness. It also has a built-in pickup whose position can be independenly selected. The only constraint is that the pickup has to be placed before the excitation position. Usage chain(... : openStringPickDown(length,stiffness,pluckPosition,excitation) : ...) Where: length : the length of the string in meters stiffness : the stiffness of the string (0-1) (1 for max stiffness) pluckPosition : pluck position on the string (0-1) (1 is bottom) pickupPosition : position of the pickup between the top of the string and the excitation position (0-1) (1 is excitation position) excitation : the excitation signal (pm.)ksReflexionFilter The \"typical\" one-zero Karplus-strong feedforward reflexion filter. This filter will be typically used in a termination (see below). Usage terminations(_,chain(...),ksReflexionFilter) (pm.)rStringRigidTermination Bidirectional block implementing a right rigid string termination (no damping, just phase inversion). Usage chain(rStringRigidTermination : stringSegment : ...) (pm.)lStringRigidTermination Bidirectional block implementing a left rigid string termination (no damping, just phase inversion). Usage chain(... : stringSegment : lStringRigidTermination) (pm.)elecGuitarBridge Bidirectional block implementing a simple electric guitar bridge. This block is based on bridgeFilter . The bridge doesn't implement transmittance since it is not meant to be connected to a body (unlike acoustic guitar). It also partially sets the resonance duration of the string with the nuts used on the other side. Usage chain(... : stringSegment : elecGuitarBridge) (pm.)elecGuitarNuts Bidirectional block implementing a simple electric guitar nuts. This block is based on bridgeFilter and does essentially the same thing as elecGuitarBridge , but on the other side of the chain. It also partially sets the resonance duration of the string with the bridge used on the other side. Usage chain(elecGuitarNuts : stringSegment : ...) (pm.)guitarBridge Bidirectional block implementing a simple acoustic guitar bridge. This bridge damps more hight frequencies than elecGuitarBridge and implements a transmittance filter. It also partially sets the resonance duration of the string with the nuts used on the other side. Usage chain(... : stringSegment : guitarBridge) (pm.)guitarNuts Bidirectional block implementing a simple acoustic guitar nuts. This nuts damps more hight frequencies than elecGuitarNuts and implements a transmittance filter. It also partially sets the resonance duration of the string with the bridge used on the other side. Usage chain(guitarNuts : stringSegment : ...) (pm.)idealString An \"ideal\" string with rigid terminations and where the plucking position and the pick-up position are the same. Since terminations are rigid, this string will ring forever. Usage 1-1' : idealString(length,reflexion,xPosition,excitation) With: * length : the length of the string in meters * pluckPosition : the plucking position (0.001-0.999) * excitation : the input signal for the excitation. (pm.)ks A Karplus-Strong string (in that case, the string is implemented as a one dimension waveguide). Usage ks(length,damping,excitation) : _ Where: length : the length of the string in meters damping : string damping (0-1) excitation : excitation signal (pm.)ks_ui_MIDI Ready-to-use, MIDI-enabled Karplus-Strong string with buil-in UI. Usage ks_ui_MIDI : _ (pm.)elecGuitarModel A simple electric guitar model (without audio effects, of course) with selectable pluck position. This model implements a single string. Additional strings should be created by making a polyphonic applications out of this function. Pitch is changed by changing the length of the string and not through a finger model. Usage elecGuitarModel(length,pluckPosition,mute,excitation) : _ Where: length : the length of the string in meters pluckPosition : pluck position (0-1) (1 is on the bridge) mute : mute coefficient (1 for no mute and 0 for instant mute) excitation : excitation signal (pm.)elecGuitar A simple electric guitar model with steel strings (based on elecGuitarModel ) implementing an excitation model. This model implements a single string. Additional strings should be created by making a polyphonic applications out of this function. Usage elecGuitar(length,pluckPosition,trigger) : _ Where: length : the length of the string in meters pluckPosition : pluck position (0-1) (1 is on the bridge) mute : mute coefficient (1 for no mute and 0 for instant mute) gain : gain of the pluck (0-1) trigger : trigger signal (1 for on, 0 for off) (pm.)elecGuitar_ui_MIDI Ready-to-use MIDI-enabled electric guitar physical model with built-in UI. Usage elecGuitar_ui_MIDI : _ (pm.)guitarBody WARNING: not implemented yet! Bidirectional block implementing a simple acoustic guitar body. Usage chain(... : guitarBody) (pm.)guitarModel A simple acoustic guitar model with steel strings and selectable excitation position. This model implements a single string. Additional strings should be created by making a polyphonic applications out of this function. Pitch is changed by changing the length of the string and not through a finger model. WARNING: this function doesn't currently implement a body (just strings and bridge). Usage guitarModel(length,pluckPosition,excitation) : _ Where: length : the length of the string in meters pluckPosition : pluck position (0-1) (1 is on the bridge) excitation : excitation signal (pm.)guitar A simple acoustic guitar model with steel strings (based on guitarModel ) implementing an excitation model. This model implements a single string. Additional strings should be created by making a polyphonic applications out of this function. Usage guitar(length,pluckPosition,trigger) : _ Where: length : the length of the string in meters pluckPosition : pluck position (0-1) (1 is on the bridge) gain : gain of the excitation trigger : trigger signal (1 for on, 0 for off) (pm.)guitar_ui_MIDI Ready-to-use MIDI-enabled steel strings acoustic guitar physical model with built-in UI. Usage guitar_ui_MIDI : _ (pm.)nylonGuitarModel A simple acoustic guitar model with nylon strings and selectable excitation position. This model implements a single string. Additional strings should be created by making a polyphonic applications out of this function. Pitch is changed by changing the length of the string and not through a finger model. WARNING: this function doesn't currently implement a body (just strings and bridge). Usage nylonGuitarModel(length,pluckPosition,excitation) : _ Where: length : the length of the string in meters pluckPosition : pluck position (0-1) (1 is on the bridge) excitation : excitation signal (pm.)nylonGuitar A simple acoustic guitar model with nylon strings (based on nylonGuitarModel ) implementing an excitation model. This model implements a single string. Additional strings should be created by making a polyphonic applications out of this function. Usage nylonGuitar(length,pluckPosition,trigger) : _ Where: length : the length of the string in meters pluckPosition : pluck position (0-1) (1 is on the bridge) gain : gain of the excitation (0-1) trigger : trigger signal (1 for on, 0 for off) (pm.)nylonGuitar_ui_MIDI Ready-to-use MIDI-enabled nylon strings acoustic guitar physical model with built-in UI. Usage nylonGuitar_ui_MIDI : _ (pm.)modeInterpRes Modular string instrument resonator based on IR measurements made on 3D printed models. The 2D space allowing for the control of the shape and the scale of the model is enabled by interpolating between modes parameters. More information about this technique/project can be found here: * https://ccrma.stanford.edu/~rmichon/3dPrintingModeling/ . Usage _ : modeInterpRes(nModes,x,y) : _ Where: nModes : number of modeled modes (40 max) x : shape of the resonator (0: square, 1: square with rounded corners, 2: round) y : scale of the resonator (0: small, 1: medium, 2: large) (pm.)modularInterpBody Bidirectional block implementing a modular string instrument resonator (see modeInterpRes ). Usage chain(... : modularInterpBody(nModes,shape,scale) : ...) Where: nModes : number of modeled modes (40 max) shape : shape of the resonator (0: square, 1: square with rounded corners, 2: round) scale : scale of the resonator (0: small, 1: medium, 2: large) (pm.)modularInterpStringModel String instrument model with a modular body (see modeInterpRes and * https://ccrma.stanford.edu/~rmichon/3dPrintingModeling/ ). Usage modularInterpStringModel(length,pluckPosition,shape,scale,bodyExcitation,stringExcitation) : _ Where: stringLength : the length of the string in meters pluckPosition : pluck position (0-1) (1 is on the bridge) shape : shape of the resonator (0: square, 1: square with rounded corners, 2: round) scale : scale of the resonator (0: small, 1: medium, 2: large) bodyExcitation : excitation signal for the body stringExcitation : excitation signal for the string (pm.)modularInterpInstr String instrument with a modular body (see modeInterpRes and * https://ccrma.stanford.edu/~rmichon/3dPrintingModeling/ ). Usage modularInterpInstr(stringLength,pluckPosition,shape,scale,gain,tapBody,triggerString) : _ Where: stringLength : the length of the string in meters pluckPosition : pluck position (0-1) (1 is on the bridge) shape : shape of the resonator (0: square, 1: square with rounded corners, 2: round) scale : scale of the resonator (0: small, 1: medium, 2: large) gain : of the string excitation tapBody : send an impulse in the body of the instrument where the string is connected (1 for on, 0 for off) triggerString : trigger signal for the string (1 for on, 0 for off) (pm.)modularInterpInstr_ui_MIDI Ready-to-use MIDI-enabled string instrument with a modular body (see modeInterpRes and * https://ccrma.stanford.edu/~rmichon/3dPrintingModeling/ ) with built-in UI. Usage modularInterpInstr_ui_MIDI : _ Bowed String Instruments Low and high level basic string instruments parts. Most of the elements in this section can be used in a bidirectional chain. (pm.)bowTable Extremely basic bow table that can be used to implement a wide range of bow types for many different bowed string instruments (violin, cello, etc.). Usage excitation : bowTable(offeset,slope) : _ Where: excitation : an excitation signal offset : table offset slope : table slope (pm.)violinBowTable Violin bow table based on bowTable . Usage bowVelocity : violinBowTable(bowPressure) : _ Where: bowVelocity : velocity of the bow/excitation signal (0-1) bowPressure : bow pressure on the string (0-1) (pm.)bowInteraction Bidirectional block implementing the interaction of a bow in a chain . Usage chain(... : stringSegment : bowInteraction(bowTable) : stringSegment : ...) Where: bowTable : the bow table (pm.)violinBow Bidirectional block implementing a violin bow and its interaction with a string. Usage chain(... : stringSegment : violinBow(bowPressure,bowVelocity) : stringSegment : ...) Where: bowVelocity : velocity of the bow / excitation signal (0-1) bowPressure : bow pressure on the string (0-1) (pm.)violinBowedString Violin bowed string bidirectional block with controllable bow position. Terminations are not implemented in this model. Usage chain(nuts : violinBowedString(stringLength,bowPressure,bowVelocity,bowPosition) : bridge) Where: stringLength : the length of the string in meters bowVelocity : velocity of the bow / excitation signal (0-1) bowPressure : bow pressure on the string (0-1) bowPosition : the position of the bow on the string (0-1) (pm.)violinNuts Bidirectional block implementing simple violin nuts. This function is based on bridgeFilter . Usage chain(violinNuts : stringSegment : ...) (pm.)violinBridge Bidirectional block implementing a simple violin bridge. This function is based on bridgeFilter . Usage chain(... : stringSegment : violinBridge (pm.)violinBody Bidirectional block implementing a simple violin body (just a simple resonant lowpass filter). Usage chain(... : stringSegment : violinBridge : violinBody) (pm.)violinModel Ready-to-use simple violin physical model. This model implements a single string. Additional strings should be created by making a polyphonic applications out of this function. Pitch is changed by changing the length of the string (and not through a finger model). Usage violinModel(stringLength,bowPressure,bowVelocity,bridgeReflexion, bridgeAbsorption,bowPosition) : _ Where: stringLength : the length of the string in meters bowVelocity : velocity of the bow / excitation signal (0-1) bowPressure : bow pressure on the string (0-1)) bowPosition : the position of the bow on the string (0-1) (pm.)violin_ui Ready-to-use violin physical model with built-in UI. Usage violinModel_ui : _ (pm.)violin_ui_MIDI Ready-to-use MIDI-enabled violin physical model with built-in UI. Usage violin_ui_MIDI : _ Wind Instruments Low and high level basic wind instruments parts. Most of the elements in this section can be used in a bidirectional chain. (pm.)openTube A tube segment without terminations (same as stringSegment ). Usage chain(A : openTube(maxLength,length) : B) Where: maxLength : the maximum length of the tube in meters (should be static) length : the length of the tube in meters (pm.)reedTable Extremely basic reed table that can be used to implement a wide range of single reed types for many different instruments (saxophone, clarinet, etc.). Usage excitation : reedTable(offeset,slope) : _ Where: excitation : an excitation signal offset : table offset slope : table slope (pm.)fluteJetTable Extremely basic flute jet table. Usage excitation : fluteJetTable : _ Where: excitation : an excitation signal (pm.)brassLipsTable Simple brass lips/mouthpiece table. Since this implementation is very basic and that the lips and tube of the instrument are coupled to each other, the length of that tube must be provided here. Usage excitation : brassLipsTable(tubeLength,lipsTension) : _ Where: excitation : an excitation signal (can be DC) tubeLength : length in meters of the tube connected to the mouthpiece lipsTension : tension of the lips (0-1) (default: 0.5) (pm.)clarinetReed Clarinet reed based on reedTable with controllable stiffness. Usage excitation : clarinetReed(stiffness) : _ Where: excitation : an excitation signal stiffness : reed stiffness (0-1) (pm.)clarinetMouthPiece Bidirectional block implementing a clarinet mouthpiece as well as the various interactions happening with traveling waves. This element is ready to be plugged to a tube... Usage chain(clarinetMouthPiece(reedStiffness,pressure) : tube : etc.) Where: pressure : the pressure of the air flow (DC) created by the virtual performer (0-1). This can also be any kind of signal that will directly injected in the mouthpiece (e.g., breath noise, etc.). reedStiffness : reed stiffness (0-1) (pm.)brassLips Bidirectional block implementing a brass mouthpiece as well as the various interactions happening with traveling waves. This element is ready to be plugged to a tube... Usage chain(brassLips(tubeLength,lipsTension,pressure) : tube : etc.) Where: tubeLength : length in meters of the tube connected to the mouthpiece lipsTension : tension of the lips (0-1) (default: 0.5) pressure : the pressure of the air flow (DC) created by the virtual performer (0-1). This can also be any kind of signal that will directly injected in the mouthpiece (e.g., breath noise, etc.). (pm.)fluteEmbouchure Bidirectional block implementing a flute embouchure as well as the various interactions happening with traveling waves. This element is ready to be plugged between tubes segments... Usage chain(... : tube : fluteEmbouchure(pressure) : tube : etc.) Where: pressure : the pressure of the air flow (DC) created by the virtual performer (0-1). This can also be any kind of signal that will directly injected in the mouthpiece (e.g., breath noise, etc.). (pm.)wBell Generic wind instrument bell bidirectional block that should be placed at the end of a chain . Usage chain(... : wBell(opening)) Where: opening : the \"opening\" of bell (0-1) (pm.)fluteHead Simple flute head implementing waves reflexion. Usage chain(fluteHead : tube : ...) (pm.)fluteFoot Simple flute foot implementing waves reflexion and dispersion. Usage chain(... : tube : fluteFoot) (pm.)clarinetModel A simple clarinet physical model without tone holes (pitch is changed by changing the length of the tube of the instrument). Usage clarinetModel(length,pressure,reedStiffness,bellOpening) : _ Where: tubeLength : the length of the tube in meters pressure : the pressure of the air flow created by the virtual performer (0-1). This can also be any kind of signal that will directly injected in the mouthpiece (e.g., breath noise, etc.). reedStiffness : reed stiffness (0-1) bellOpening : the opening of bell (0-1) (pm.)clarinetModel_ui Same as clarinetModel but with a built-in UI. This function doesn't implement a virtual \"blower\", thus pressure remains an argument here. Usage clarinetModel_ui(pressure) : _ Where: pressure : the pressure of the air flow created by the virtual performer (0-1). This can also be any kind of signal that will be directly injected in the mouthpiece (e.g., breath noise, etc.). (pm.)clarinet_ui Ready-to-use clarinet physical model with built-in UI based on clarinetModel . Usage clarinet_ui : _ (pm.)clarinet_ui_MIDI Ready-to-use MIDI compliant clarinet physical model with built-in UI. Usage clarinet_ui_MIDI : _ (pm.)brassModel A simple generic brass instrument physical model without pistons (pitch is changed by changing the length of the tube of the instrument). This model is kind of hard to control and might not sound very good if bad parameters are given to it... Usage brassModel(tubeLength,lipsTension,mute,pressure) : _ Where: tubeLength : the length of the tube in meters lipsTension : tension of the lips (0-1) (default: 0.5) mute : mute opening at the end of the instrument (0-1) (default: 0.5) pressure : the pressure of the air flow created by the virtual performer (0-1). This can also be any kind of signal that will directly injected in the mouthpiece (e.g., breath noise, etc.). (pm.)brassModel_ui Same as brassModel but with a built-in UI. This function doesn't implement a virtual \"blower\", thus pressure remains an argument here. Usage brassModel_ui(pressure) : _ Where: pressure : the pressure of the air flow created by the virtual performer (0-1). This can also be any kind of signal that will be directly injected in the mouthpiece (e.g., breath noise, etc.). (pm.)brass_ui Ready-to-use brass instrument physical model with built-in UI based on brassModel . Usage brass_ui : _ (pm.)brass_ui_MIDI Ready-to-use MIDI-controllable brass instrument physical model with built-in UI. Usage brass_ui_MIDI : _ (pm.)fluteModel A simple generic flute instrument physical model without tone holes (pitch is changed by changing the length of the tube of the instrument). Usage fluteModel(tubeLength,mouthPosition,pressure) : _ Where: tubeLength : the length of the tube in meters mouthPosition : position of the mouth on the embouchure (0-1) (default: 0.5) pressure : the pressure of the air flow created by the virtual performer (0-1). This can also be any kind of signal that will directly injected in the mouthpiece (e.g., breath noise, etc.). (pm.)fluteModel_ui Same as fluteModel but with a built-in UI. This function doesn't implement a virtual \"blower\", thus pressure remains an argument here. Usage fluteModel_ui(pressure) : _ Where: pressure : the pressure of the air flow created by the virtual performer (0-1). This can also be any kind of signal that will be directly injected in the mouthpiece (e.g., breath noise, etc.). (pm.)flute_ui Ready-to-use flute physical model with built-in UI based on fluteModel . Usage flute_ui : _ (pm.)flute_ui_MIDI Ready-to-use MIDI-controllable flute physical model with built-in UI. Usage flute_ui_MIDI : _ Exciters Various kind of excitation signal generators. (pm.)impulseExcitation Creates an impulse excitation of one sample. Usage gate = button('gate'); impulseExcitation(gate) : chain; Where: gate : a gate button (pm.)strikeModel Creates a filtered noise excitation. Usage gate = button('gate'); strikeModel(LPcutoff,HPcutoff,sharpness,gain,gate) : chain; Where: HPcutoff : highpass cutoff frequency LPcutoff : lowpass cutoff frequency sharpness : sharpness of the attack and release (0-1) gain : gain of the excitation gate : a gate button/trigger signal (0/1) (pm.)strike Strikes generator with controllable excitation position. Usage gate = button('gate'); strike(exPos,sharpness,gain,gate) : chain; Where: exPos : excitation position wiht 0: for max low freqs and 1: for max high freqs. So, on membrane for example, 0 would be the middle and 1 the edge sharpness : sharpness of the attack and release (0-1) gain : gain of the excitation gate : a gate button/trigger signal (0/1) (pm.)pluckString Creates a plucking excitation signal. Usage trigger = button('gate'); pluckString(stringLength,cutoff,maxFreq,sharpness,trigger) Where: stringLength : length of the string to pluck cutoff : cutoff ratio (1 for default) maxFreq : max frequency ratio (1 for default) sharpness : sharpness of the attack and release (1 for default) gain : gain of the excitation (0-1) trigger : trigger signal (1 for on, 0 for off) (pm.)blower A virtual blower creating a DC signal with some breath noise in it. Usage blower(pressure,breathGain,breathCutoff) : _ Where: pressure : pressure (0-1) breathGain : breath noise gain (0-1) (recommended: 0.005) breathCutoff : breath cuttoff frequency (Hz) (recommended: 2000) (pm.)blower_ui Same as blower but with a built-in UI. Usage blower : somethingToBeBlown Modal Percussions High and low level functions for modal synthesis of percussion instruments. (pm.)djembeModel Dirt-simple djembe modal physical model. Mode parameters are empirically calculated and don't correspond to any measurements or 3D model. They kind of sound good though :). Usage excitation : djembeModel(freq) Where: excitation : excitation signal freq : fundamental frequency of the bar (pm.)djembe Dirt-simple djembe modal physical model. Mode parameters are empirically calculated and don't correspond to any measurements or 3D model. They kind of sound good though :). This model also implements a virtual \"exciter\". Usage djembe(freq,strikePosition,strikeSharpness,gain,trigger) Where: freq : fundamental frequency of the model strikePosition : strike position (0 for the middle of the membrane and 1 for the edge) strikeSharpness : sharpness of the strike (0-1, default: 0.5) gain : gain of the strike trigger : trigger signal (0: off, 1: on) (pm.)djembe_ui_MIDI Simple MIDI controllable djembe physical model with built-in UI. Usage djembe_ui_MIDI : _ (pm.)marimbaBarModel Generic marimba tone bar modal model. This model was generated using mesh2faust from a 3D CAD model of a marimba tone bar ( libraries/modalmodels/marimbaBar ). The corresponding CAD model is that of a C2 tone bar (original fundamental frequency: ~65Hz). While marimbaBarModel allows to translate the harmonic content of the generated sound by providing a frequency ( freq ), mode transposition has limits and the model will sound less and less like a marimba tone bar as it diverges from C2. To make an accurate model of a marimba, we'd want to have an independent model for each bar... This model contains 5 excitation positions going linearly from the center bottom to the center top of the bar. Obviously, a model with more excitation position could be regenerated using mesh2faust . Usage excitation : marimbaBarModel(freq,exPos,t60,t60DecayRatio,t60DecaySlope) Where: excitation : excitation signal freq : fundamental frequency of the bar exPos : excitation position (0-4) t60 : T60 in seconds (recommended value: 0.1) t60DecayRatio : T60 decay ratio (recommended value: 1) t60DecaySlope : T60 decay slope (recommended value: 5) (pm.)marimbaResTube Simple marimba resonance tube. Usage marimbaResTube(tubeLength,excitation) Where: tubeLength : the length of the tube in meters excitation : the excitation signal (audio in) (pm.)marimbaModel Simple marimba physical model implementing a single tone bar connected to tube. This model is scalable and can be adapted to any size of bar/tube (see marimbaBarModel to know more about the limitations of this type of system). Usage excitation : marimbaModel(freq,exPos) : _ Where: freq : the frequency of the bar/tube couple exPos : excitation position (0-4) (pm.)marimba Simple marimba physical model implementing a single tone bar connected to tube. This model is scalable and can be adapted to any size of bar/tube (see marimbaBarModel to know more about the limitations of this type of system). This function also implement a virtual exciter to drive the model. Usage excitation : marimba(freq,strikePosition,strikeCutoff,strikeSharpness,gain,trigger) : _ Where: excitation : the excitation signal freq : the frequency of the bar/tube couple strikePosition : strike position (0-4) strikeCutoff : cuttoff frequency of the strike genarator (recommended: ~7000Hz) strikeSharpness : shaarpness of the strike (recommened: ~0.25) gain : gain of the strike (0-1) trigger signal (0: off, 1: on) (pm.)marimba_ui_MIDI Simple MIDI controllable marimba physical model with built-in UI implementing a single tone bar connected to tube. This model is scalable and can be adapted to any size of bar/tube (see marimbaBarModel to know more about the limitations of this type of system). Usage marimba_ui_MIDI : _ (pm.)churchBellModel Generic church bell modal model generated by mesh2faust from libraries/modalmodels/churchBell . Modeled after T. Rossing and R. Perrin, Vibrations of Bells, Applied Acoustics 2, 1987. Model height is 301 mm. This model contains 7 excitation positions going linearly from the bottom to the top of the bell. Obviously, a model with more excitation position could be regenerated using mesh2faust . Usage excitation : churchBellModel(nModes,exPos,t60,t60DecayRatio,t60DecaySlope) Where: excitation : the excitation signal nModes : number of synthesized modes (max: 50) exPos : excitation position (0-6) t60 : T60 in seconds (recommended value: 0.1) t60DecayRatio : T60 decay ratio (recommended value: 1) t60DecaySlope : T60 decay slope (recommended value: 5) (pm.)churchBell Generic church bell modal model. Modeled after T. Rossing and R. Perrin, Vibrations of Bells, Applied Acoustics 2, 1987. Model height is 301 mm. This model contains 7 excitation positions going linearly from the bottom to the top of the bell. Obviously, a model with more excitation position could be regenerated using mesh2faust . This function also implement a virtual exciter to drive the model. Usage excitation : churchBell(strikePosition,strikeCutoff,strikeSharpness,gain,trigger) : _ Where: excitation : the excitation signal strikePosition : strike position (0-6) strikeCutoff : cuttoff frequency of the strike genarator (recommended: ~7000Hz) strikeSharpness : shaarpness of the strike (recommened: ~0.25) gain : gain of the strike (0-1) trigger signal (0: off, 1: on) (pm.)churchBell_ui Church bell physical model based on churchBell with built-in UI. Usage churchBell_ui : _ (pm.)englishBellModel English church bell modal model generated by mesh2faust from libraries/modalmodels/englishBell . Modeled after D. Bartocha and . Baron, Influence of Tin Bronze Melting and Pouring Parameters on Its Properties and Bell' Tone, Archives of Foundry Engineering, 2016. Model height is 1 m. This model contains 7 excitation positions going linearly from the bottom to the top of the bell. Obviously, a model with more excitation position could be regenerated using mesh2faust . Usage excitation : englishBellModel(nModes,exPos,t60,t60DecayRatio,t60DecaySlope) Where: excitation : the excitation signal nModes : number of synthesized modes (max: 50) exPos : excitation position (0-6) t60 : T60 in seconds (recommended value: 0.1) t60DecayRatio : T60 decay ratio (recommended value: 1) t60DecaySlope : T60 decay slope (recommended value: 5) (pm.)englishBell English church bell modal model. Modeled after D. Bartocha and . Baron, Influence of Tin Bronze Melting and Pouring Parameters on Its Properties and Bell' Tone, Archives of Foundry Engineering, 2016. Model height is 1 m. This model contains 7 excitation positions going linearly from the bottom to the top of the bell. Obviously, a model with more excitation position could be regenerated using mesh2faust . This function also implement a virtual exciter to drive the model. Usage excitation : englishBell(strikePosition,strikeCutoff,strikeSharpness,gain,trigger) : _ Where: excitation : the excitation signal strikePosition : strike position (0-6) strikeCutoff : cuttoff frequency of the strike genarator (recommended: ~7000Hz) strikeSharpness : shaarpness of the strike (recommened: ~0.25) gain : gain of the strike (0-1) trigger signal (0: off, 1: on) (pm.)englishBell_ui English church bell physical model based on englishBell with built-in UI. Usage englishBell_ui : _ (pm.)frenchBellModel French church bell modal model generated by mesh2faust from libraries/modalmodels/frenchBell . Modeled after D. Bartocha and . Baron, Influence of Tin Bronze Melting and Pouring Parameters on Its Properties and Bell' Tone, Archives of Foundry Engineering, 2016. Model height is 1 m. This model contains 7 excitation positions going linearly from the bottom to the top of the bell. Obviously, a model with more excitation position could be regenerated using mesh2faust . Usage excitation : frenchBellModel(nModes,exPos,t60,t60DecayRatio,t60DecaySlope) Where: excitation : the excitation signal nModes : number of synthesized modes (max: 50) exPos : excitation position (0-6) t60 : T60 in seconds (recommended value: 0.1) t60DecayRatio : T60 decay ratio (recommended value: 1) t60DecaySlope : T60 decay slope (recommended value: 5) (pm.)frenchBell French church bell modal model. Modeled after D. Bartocha and . Baron, Influence of Tin Bronze Melting and Pouring Parameters on Its Properties and Bell' Tone, Archives of Foundry Engineering, 2016. Model height is 1 m. This model contains 7 excitation positions going linearly from the bottom to the top of the bell. Obviously, a model with more excitation position could be regenerated using mesh2faust . This function also implement a virtual exciter to drive the model. Usage excitation : frenchBell(strikePosition,strikeCutoff,strikeSharpness,gain,trigger) : _ Where: excitation : the excitation signal strikePosition : strike position (0-6) strikeCutoff : cuttoff frequency of the strike genarator (recommended: ~7000Hz) strikeSharpness : shaarpness of the strike (recommened: ~0.25) gain : gain of the strike (0-1) trigger signal (0: off, 1: on) (pm.)frenchBell_ui French church bell physical model based on frenchBell with built-in UI. Usage frenchBell_ui : _ (pm.)germanBellModel German church bell modal model generated by mesh2faust from libraries/modalmodels/germanBell . Modeled after D. Bartocha and . Baron, Influence of Tin Bronze Melting and Pouring Parameters on Its Properties and Bell' Tone, Archives of Foundry Engineering, 2016. Model height is 1 m. This model contains 7 excitation positions going linearly from the bottom to the top of the bell. Obviously, a model with more excitation position could be regenerated using mesh2faust . Usage excitation : germanBellModel(nModes,exPos,t60,t60DecayRatio,t60DecaySlope) Where: excitation : the excitation signal nModes : number of synthesized modes (max: 50) exPos : excitation position (0-6) t60 : T60 in seconds (recommended value: 0.1) t60DecayRatio : T60 decay ratio (recommended value: 1) t60DecaySlope : T60 decay slope (recommended value: 5) (pm.)germanBell German church bell modal model. Modeled after D. Bartocha and . Baron, Influence of Tin Bronze Melting and Pouring Parameters on Its Properties and Bell' Tone, Archives of Foundry Engineering, 2016. Model height is 1 m. This model contains 7 excitation positions going linearly from the bottom to the top of the bell. Obviously, a model with more excitation position could be regenerated using mesh2faust . This function also implement a virtual exciter to drive the model. Usage excitation : germanBell(strikePosition,strikeCutoff,strikeSharpness,gain,trigger) : _ Where: excitation : the excitation signal strikePosition : strike position (0-6) strikeCutoff : cuttoff frequency of the strike genarator (recommended: ~7000Hz) strikeSharpness : shaarpness of the strike (recommened: ~0.25) gain : gain of the strike (0-1) trigger signal (0: off, 1: on) (pm.)germanBell_ui German church bell physical model based on germanBell with built-in UI. Usage germanBell_ui : _ (pm.)russianBellModel Russian church bell modal model generated by mesh2faust from libraries/modalmodels/russianBell . Modeled after D. Bartocha and . Baron, Influence of Tin Bronze Melting and Pouring Parameters on Its Properties and Bell' Tone, Archives of Foundry Engineering, 2016. Model height is 2 m. This model contains 7 excitation positions going linearly from the bottom to the top of the bell. Obviously, a model with more excitation position could be regenerated using mesh2faust . Usage excitation : russianBellModel(nModes,exPos,t60,t60DecayRatio,t60DecaySlope) Where: excitation : the excitation signal nModes : number of synthesized modes (max: 50) exPos : excitation position (0-6) t60 : T60 in seconds (recommended value: 0.1) t60DecayRatio : T60 decay ratio (recommended value: 1) t60DecaySlope : T60 decay slope (recommended value: 5) (pm.)russianBell Russian church bell modal model. Modeled after D. Bartocha and . Baron, Influence of Tin Bronze Melting and Pouring Parameters on Its Properties and Bell' Tone, Archives of Foundry Engineering, 2016. Model height is 2 m. This model contains 7 excitation positions going linearly from the bottom to the top of the bell. Obviously, a model with more excitation position could be regenerated using mesh2faust . This function also implement a virtual exciter to drive the model. Usage excitation : russianBell(strikePosition,strikeCutoff,strikeSharpness,gain,trigger) : _ Where: excitation : the excitation signal strikePosition : strike position (0-6) strikeCutoff : cuttoff frequency of the strike genarator (recommended: ~7000Hz) strikeSharpness : shaarpness of the strike (recommened: ~0.25) gain : gain of the strike (0-1) trigger signal (0: off, 1: on) (pm.)russianBell_ui Russian church bell physical model based on russianBell with built-in UI. Usage russianBell_ui : _ (pm.)standardBellModel Standard church bell modal model generated by mesh2faust from libraries/modalmodels/standardBell . Modeled after T. Rossing and R. Perrin, Vibrations of Bells, Applied Acoustics 2, 1987. Model height is 1.8 m. This model contains 7 excitation positions going linearly from the bottom to the top of the bell. Obviously, a model with more excitation position could be regenerated using mesh2faust . Usage excitation : standardBellModel(nModes,exPos,t60,t60DecayRatio,t60DecaySlope) Where: excitation : the excitation signal nModes : number of synthesized modes (max: 50) exPos : excitation position (0-6) t60 : T60 in seconds (recommended value: 0.1) t60DecayRatio : T60 decay ratio (recommended value: 1) t60DecaySlope : T60 decay slope (recommended value: 5) (pm.)standardBell Standard church bell modal model. Modeled after T. Rossing and R. Perrin, Vibrations of Bells, Applied Acoustics 2, 1987. Model height is 1.8 m. This model contains 7 excitation positions going linearly from the bottom to the top of the bell. Obviously, a model with more excitation position could be regenerated using mesh2faust . This function also implement a virtual exciter to drive the model. Usage excitation : standardBell(strikePosition,strikeCutoff,strikeSharpness,gain,trigger) : _ Where: excitation : the excitation signal strikePosition : strike position (0-6) strikeCutoff : cuttoff frequency of the strike genarator (recommended: ~7000Hz) strikeSharpness : shaarpness of the strike (recommened: ~0.25) gain : gain of the strike (0-1) trigger signal (0: off, 1: on) (pm.)standardBell_ui Standard church bell physical model based on standardBell with built-in UI. Usage standardBell_ui : _ Vocal Synthesis Vocal synthesizer functions (source/filter, fof, etc.). (pm.)formantValues Formant data values. The formant data used here come from the CSOUND manual * http://www.csounds.com/manual/html/ . Usage ba.take(j+1,formantValues.f(i)) : _ ba.take(j+1,formantValues.g(i)) : _ ba.take(j+1,formantValues.bw(i)) : _ Where: i : formant number j : (voiceType*nFormants)+vowel voiceType : the voice type (0: alto, 1: bass, 2: countertenor, 3: soprano, 4: tenor) vowel : the vowel (0: a, 1: e, 2: i, 3: o, 4: u) (pm.)voiceGender Calculate the gender for the provided voiceType value. (0: male, 1: female) Usage voiceGender(voiceType) : _ Where: voiceType : the voice type (0: alto, 1: bass, 2: countertenor, 3: soprano, 4: tenor) (pm.)skirtWidthMultiplier Calculates value to multiply bandwidth to obtain skirtwidth for a Fof filter. Usage skirtWidthMultiplier(vowel,freq,gender) : _ Where: vowel : the vowel (0: a, 1: e, 2: i, 3: o, 4: u) freq : the fundamental frequency of the excitation signal gender : gender of the voice used in the fof filter (0: male, 1: female) (pm.)autobendFreq Autobends the center frequencies of formants 1 and 2 based on the fundamental frequency of the excitation signal and leaves all other formant frequencies unchanged. Ported from chant-lib . * Reference: https://ccrma.stanford.edu/~rmichon/chantLib/ . Usage _ : autobendFreq(n,freq,voiceType) : _ Where: n : formant index freq : the fundamental frequency of the excitation signal voiceType : the voice type (0: alto, 1: bass, 2: countertenor, input is the center frequency of the corresponding formant (pm.)vocalEffort Changes the gains of the formants based on the fundamental frequency of the excitation signal. Higher formants are reinforced for higher fundamental frequencies. Ported from chant-lib . * Reference: https://ccrma.stanford.edu/~rmichon/chantLib/ . Usage _ : vocalEffort(freq,gender) : _ Where: freq : the fundamental frequency of the excitation signal gender : the gender of the voice type (0: male, 1: female) input is the linear amplitude of the formant (pm.)fof Function to generate a single Formant-Wave-Function. * Reference: https://ccrma.stanford.edu/~mjolsen/pdfs/smc2016_MOlsenFOF.pdf . Usage _ : fof(fc,bw,a,g) : _ Where: fc : formant center frequency, bw : formant bandwidth (Hz), sw : formant skirtwidth (Hz) g : linear scale factor (g=1 gives 0dB amplitude response at fc) input is an impulse signal to excite filter (pm.)fofSH FOF with sample and hold used on bw and a parameter used in the filter-cycling FOF function fofCycle . * Reference: https://ccrma.stanford.edu/~mjolsen/pdfs/smc2016_MOlsenFOF.pdf . Usage _ : fofSH(fc,bw,a,g) : _ Where: all parameters same as for fof (pm.)fofCycle FOF implementation where time-varying filter parameter noise is mitigated by using a cycle of n sample and hold FOF filters. * Reference: https://ccrma.stanford.edu/~mjolsen/pdfs/smc2016_MOlsenFOF.pdf . Usage _ : fofCycle(fc,bw,a,g,n) : _ Where: n : the number of FOF filters to cycle through all other parameters are same as for fof (pm.)fofSmooth FOF implementation where time-varying filter parameter noise is mitigated by lowpass filtering the filter parameters bw and a with smooth . Usage _ : fofSmooth(fc,bw,sw,g,tau) : _ Where: tau : the desired smoothing time constant in seconds all other parameters are same as for fof (pm.)formantFilterFofCycle Formant filter based on a single FOF filter. Formant parameters are linearly interpolated allowing to go smoothly from one vowel to another. A cycle of n fof filters with sample-and-hold is used so that the fof filter parameters can be varied in realtime. This technique is more robust but more computationally expensive than formantFilterFofSmooth .Voice type can be selected but must correspond to the frequency range of the provided source to be realistic. Usage _ : formantFilterFofCycle(voiceType,vowel,nFormants,i,freq) : _ Where: voiceType : the voice type (0: alto, 1: bass, 2: countertenor, 3: soprano, 4: tenor) vowel : the vowel (0: a, 1: e, 2: i, 3: o, 4: u) nFormants : number of formant regions in frequency domain, typically 5 i : formant number (i.e. 0 - 4) used to index formant data value arrays freq : fundamental frequency of excitation signal. Used to calculate rise time of envelope (pm.)formantFilterFofSmooth Formant filter based on a single FOF filter. Formant parameters are linearly interpolated allowing to go smoothly from one vowel to another. Fof filter parameters are lowpass filtered to mitigate possible noise from varying them in realtime. Voice type can be selected but must correspond to the frequency range of the provided source to be realistic. Usage _ : formantFilterFofSmooth(voiceType,vowel,nFormants,i,freq) : _ Where: voiceType : the voice type (0: alto, 1: bass, 2: countertenor, 3: soprano, 4: tenor) vowel : the vowel (0: a, 1: e, 2: i, 3: o, 4: u) nFormants : number of formant regions in frequency domain, typically 5 i : formant number (i.e. 1 - 5) used to index formant data value arrays freq : fundamental frequency of excitation signal. Used to calculate rise time of envelope (pm.)formantFilterBP Formant filter based on a single resonant bandpass filter. Formant parameters are linearly interpolated allowing to go smoothly from one vowel to another. Voice type can be selected but must correspond to the frequency range of the provided source to be realistic. Usage _ : formantFilterBP(voiceType,vowel,nFormants,i,freq) : _ Where: voiceType : the voice type (0: alto, 1: bass, 2: countertenor, 3: soprano, 4: tenor) vowel : the vowel (0: a, 1: e, 2: i, 3: o, 4: u) nFormants : number of formant regions in frequency domain, typically 5 i : formant index used to index formant data value arrays freq : fundamental frequency of excitation signal. (pm.)formantFilterbank Formant filterbank which can use different types of filterbank functions and different excitation signals. Formant parameters are linearly interpolated allowing to go smoothly from one vowel to another. Voice type can be selected but must correspond to the frequency range of the provided source to be realistic. Usage _ : formantFilterbank(voiceType,vowel,formantGen,freq) : _ Where: voiceType : the voice type (0: alto, 1: bass, 2: countertenor, 3: soprano, 4: tenor) vowel : the vowel (0: a, 1: e, 2: i, 3: o, 4: u) formantGen : the specific formant filterbank function (i.e. FormantFilterbankBP, FormantFilterbankFof,...) freq : fundamental frequency of excitation signal. Needed for FOF version to calculate rise time of envelope (pm.)formantFilterbankFofCycle Formant filterbank based on a bank of fof filters. Formant parameters are linearly interpolated allowing to go smoothly from one vowel to another. Voice type can be selected but must correspond to the frequency range of the provided source to be realistic. Usage _ : formantFilterbankFofCycle(voiceType,vowel,freq) : _ Where: voiceType : the voice type (0: alto, 1: bass, 2: countertenor, 3: soprano, 4: tenor) vowel : the vowel (0: a, 1: e, 2: i, 3: o, 4: u) freq : the fundamental frequency of the excitation signal. Needed to (pm.)formantFilterbankFofSmooth Formant filterbank based on a bank of fof filters. Formant parameters are linearly interpolated allowing to go smoothly from one vowel to another. Voice type can be selected but must correspond to the frequency range of the provided source to be realistic. Usage _ : formantFilterbankFofSmooth(voiceType,vowel,freq) : _ Where: voiceType : the voice type (0: alto, 1: bass, 2: countertenor, 3: soprano, 4: tenor) vowel : the vowel (0: a, 1: e, 2: i, 3: o, 4: u) freq : the fundamental frequency of the excitation signal. Needed to (pm.)formantFilterbankBP Formant filterbank based on a bank of resonant bandpass filters. Formant parameters are linearly interpolated allowing to go smoothly from one vowel to another. Voice type can be selected but must correspond to the frequency range of the provided source to be realistic. Usage _ : formantFilterbankBP(voiceType,vowel) : _ Where: voiceType : the voice type (0: alto, 1: bass, 2: countertenor, 3: soprano, 4: tenor) vowel : the vowel (0: a, 1: e, 2: i, 3: o, 4: u) freq : the fundamental frequency of the excitation signal. Needed (pm.)SFFormantModel Simple formant/vocal synthesizer based on a source/filter model. The source and filterbank must be specified by the user. filterbank must take the same input parameters as formantFilterbank ( BP / FofCycle / FofSmooth ). Formant parameters are linearly interpolated allowing to go smoothly from one vowel to another. Voice type can be selected but must correspond to the frequency range of the synthesized voice to be realistic. Usage SFFormantModel(voiceType,vowel,exType,freq,gain,source,filterbank,isFof) : _ Where: voiceType : the voice type (0: alto, 1: bass, 2: countertenor, 3: soprano, 4: tenor) vowel : the vowel (0: a, 1: e, 2: i, 3: o, 4: u exType : voice vs. fricative sound ratio (0-1 where 1 is 100% fricative) freq : the fundamental frequency of the source signal gain : linear gain multiplier to multiply the source by isFof : whether model is FOF based (0: no, 1: yes) (pm.)SFFormantModelFofCycle Simple formant/vocal synthesizer based on a source/filter model. The source is just a periodic impulse and the \"filter\" is a bank of FOF filters. Formant parameters are linearly interpolated allowing to go smoothly from one vowel to another. Voice type can be selected but must correspond to the frequency range of the synthesized voice to be realistic. This model does not work with noise in the source signal so exType has been removed and model does not depend on SFFormantModel function. Usage SFFormantModelFofCycle(voiceType,vowel,freq,gain) : _ Where: voiceType : the voice type (0: alto, 1: bass, 2: countertenor, 3: soprano, 4: tenor) vowel : the vowel (0: a, 1: e, 2: i, 3: o, 4: u freq : the fundamental frequency of the source signal gain : linear gain multiplier to multiply the source by (pm.)SFFormantModelFofSmooth Simple formant/vocal synthesizer based on a source/filter model. The source is just a periodic impulse and the \"filter\" is a bank of FOF filters. Formant parameters are linearly interpolated allowing to go smoothly from one vowel to another. Voice type can be selected but must correspond to the frequency range of the synthesized voice to be realistic. Usage SFFormantModelFofSmooth(voiceType,vowel,freq,gain) : _ Where: voiceType : the voice type (0: alto, 1: bass, 2: countertenor, 3: soprano, 4: tenor) vowel : the vowel (0: a, 1: e, 2: i, 3: o, 4: u freq : the fundamental frequency of the source signal gain : linear gain multiplier to multiply the source by (pm.)SFFormantModelBP Simple formant/vocal synthesizer based on a source/filter model. The source is just a sawtooth wave and the \"filter\" is a bank of resonant bandpass filters. Formant parameters are linearly interpolated allowing to go smoothly from one vowel to another. Voice type can be selected but must correspond to the frequency range of the synthesized voice to be realistic. The formant data used here come from the CSOUND manual * http://www.csounds.com/manual/html/ . Usage SFFormantModelBP(voiceType,vowel,exType,freq,gain) : _ Where: voiceType : the voice type (0: alto, 1: bass, 2: countertenor, 3: soprano, 4: tenor) vowel : the vowel (0: a, 1: e, 2: i, 3: o, 4: u exType : voice vs. fricative sound ratio (0-1 where 1 is 100% fricative) freq : the fundamental frequency of the source signal gain : linear gain multiplier to multiply the source by (pm.)SFFormantModelFofCycle_ui Ready-to-use source-filter vocal synthesizer with built-in user interface. Usage SFFormantModelFofCycle_ui : _ (pm.)SFFormantModelFofSmooth_ui Ready-to-use source-filter vocal synthesizer with built-in user interface. Usage SFFormantModelFofSmooth_ui : _ (pm.)SFFormantModelBP_ui Ready-to-use source-filter vocal synthesizer with built-in user interface. Usage SFFormantModelBP_ui : _ (pm.)SFFormantModelFofCycle_ui_MIDI Ready-to-use MIDI-controllable source-filter vocal synthesizer. Usage SFFormantModelFofCycle_ui_MIDI : _ (pm.)SFFormantModelFofSmooth_ui_MIDI Ready-to-use MIDI-controllable source-filter vocal synthesizer. Usage SFFormantModelFofSmooth_ui_MIDI : _ (pm.)SFFormantModelBP_ui_MIDI Ready-to-use MIDI-controllable source-filter vocal synthesizer. Usage SFFormantModelBP_ui_MIDI : _ Misc Functions Various miscellaneous functions. (pm.)allpassNL Bidirectional block adding nonlinearities in both directions in a chain. Nonlinearities are created by modulating the coefficients of a passive allpass filter by the signal it is processing. Usage chain(... : allpassNL(nonlinearity) : ...) Where: nonlinearity : amount of nonlinearity to be added (0-1) modalModel Implement multiple resonance modes using resonant bandpass filters. Usage _ : modalModel(n, freqs, t60s, gains) : _ Where: n : number of given modes freqs : list of filter center freqencies t60s : list of mode resonance durations (in seconds) gains : list of mode gains (0-1) For example, to generate a model with 2 modes (440 Hz and 660 Hz, a fifth) where the higher one decays faster and is attenuated: os.impulse : modalModel(2, (440, 660), (0.5, 0.25), (ba.db2linear(-1), ba.db2linear(-6)) : _ Further reading: Grumiaux et. al., 2017: Impulse-Response and CAD-Model-Based Physical Modeling in Faust","title":" physmodels "},{"location":"libs/physmodels/#physmodelslib","text":"Faust physical modeling library. Its official prefix is pm . This library provides an environment to facilitate physical modeling of musical instruments. It contains dozens of functions implementing low and high level elements going from a simple waveguide to fully operational models with built-in UI, etc. It is organized as follows: Global Variables : useful pre-defined variables for physical modeling (e.g., speed of sound, etc.). Conversion Tools : conversion functions specific to physical modeling (e.g., length to frequency, etc.). Bidirectional Utilities : functions to create bidirectional block diagrams for physical modeling. Basic Elements : waveguides, specific types of filters, etc. String Instruments : various types of strings (e.g., steel, nylon, etc.), bridges, guitars, etc. Bowed String Instruments : parts and models specific to bowed string instruments (e.g., bows, bridges, violins, etc.). Wind Instrument : parts and models specific to wind string instruments (e.g., reeds, mouthpieces, flutes, clarinets, etc.). Exciters : pluck generators, \"blowers\", etc. Modal Percussions : percussion instruments based on modal models. Vocal Synthesis : functions for various vocal synthesis techniques (e.g., fof, source/filter, etc.) and vocal synthesizers. Misc Functions : any other functions that don't fit in the previous category (e.g., nonlinear filters, etc.). This library is part of the Faust Physical Modeling ToolKit. More information on how to use this library can be found on this page: * https://ccrma.stanford.edu/~rmichon/pmFaust . Tutorials on how to make physical models of musical instruments using Faust can be found here as well.","title":"physmodels.lib"},{"location":"libs/physmodels/#global-variables","text":"Useful pre-defined variables for physical modeling.","title":"Global Variables"},{"location":"libs/physmodels/#pmspeedofsound","text":"Speed of sound in meters per second (340m/s).","title":"(pm.)speedOfSound"},{"location":"libs/physmodels/#pmmaxlength","text":"The default maximum length (3) in meters of strings and tubes used in this library. This variable should be overriden to allow longer strings or tubes.","title":"(pm.)maxLength"},{"location":"libs/physmodels/#conversion-tools","text":"Useful conversion tools for physical modeling.","title":"Conversion Tools"},{"location":"libs/physmodels/#pmf2l","text":"Frequency to length in meters.","title":"(pm.)f2l"},{"location":"libs/physmodels/#usage","text":"f2l(freq) : distanceInMeters Where: freq : the frequency","title":"Usage"},{"location":"libs/physmodels/#pml2f","text":"Length in meters to frequency.","title":"(pm.)l2f"},{"location":"libs/physmodels/#usage_1","text":"l2f(length) : freq Where: length : length/distance in meters","title":"Usage"},{"location":"libs/physmodels/#pml2s","text":"Length in meters to number of samples.","title":"(pm.)l2s"},{"location":"libs/physmodels/#usage_2","text":"l2s(l) : numberOfSamples Where: l : length in meters","title":"Usage"},{"location":"libs/physmodels/#bidirectional-utilities","text":"Set of fundamental functions to create bi-directional block diagrams in Faust. These elements are used as the basis of this library to connect high level elements (e.g., mouthpieces, strings, bridge, instrument body, etc.). Each block has 3 inputs and 3 outputs. The first input/output carry left going waves, the second input/output carry right going waves, and the third input/output is used to carry any potential output signal to the end of the algorithm.","title":"Bidirectional Utilities"},{"location":"libs/physmodels/#pmbasicblock","text":"Empty bidirectional block to be used with chain : 3 signals ins and 3 signals out.","title":"(pm.)basicBlock"},{"location":"libs/physmodels/#usage_3","text":"chain(basicBlock : basicBlock : etc.)","title":"Usage"},{"location":"libs/physmodels/#pmchain","text":"Creates a chain of bidirectional blocks. Blocks must have 3 inputs and outputs. The first input/output carry left going waves, the second input/output carry right going waves, and the third input/output is used to carry any potential output signal to the end of the algorithm. The implied one sample delay created by the ~ operator is generalized to the left and right going waves. Thus, n blocks in chain() will add an n samples delay to both left and right going waves.","title":"(pm.)chain"},{"location":"libs/physmodels/#usage_4","text":"leftGoingWaves,rightGoingWaves,mixedOutput : chain( A : B ) : leftGoingWaves,rightGoingWaves,mixedOutput with{ A = _,_,_; };","title":"Usage"},{"location":"libs/physmodels/#pminleftwave","text":"Adds a signal to left going waves anywhere in a chain of blocks.","title":"(pm.)inLeftWave"},{"location":"libs/physmodels/#usage_5","text":"model(x) = chain(A : inLeftWave(x) : B) Where A and B are bidirectional blocks and x is the signal added to left going waves in that chain.","title":"Usage"},{"location":"libs/physmodels/#pminrightwave","text":"Adds a signal to right going waves anywhere in a chain of blocks.","title":"(pm.)inRightWave"},{"location":"libs/physmodels/#usage_6","text":"model(x) = chain(A : inRightWave(x) : B) Where A and B are bidirectional blocks and x is the signal added to right going waves in that chain.","title":"Usage"},{"location":"libs/physmodels/#pmin","text":"Adds a signal to left and right going waves anywhere in a chain of blocks.","title":"(pm.)in"},{"location":"libs/physmodels/#usage_7","text":"model(x) = chain(A : in(x) : B) Where A and B are bidirectional blocks and x is the signal added to left and right going waves in that chain.","title":"Usage"},{"location":"libs/physmodels/#pmoutleftwave","text":"Sends the signal of left going waves to the output channel of the chain .","title":"(pm.)outLeftWave"},{"location":"libs/physmodels/#usage_8","text":"chain(A : outLeftWave : B) Where A and B are bidirectional blocks.","title":"Usage"},{"location":"libs/physmodels/#pmoutrightwave","text":"Sends the signal of right going waves to the output channel of the chain .","title":"(pm.)outRightWave"},{"location":"libs/physmodels/#usage_9","text":"chain(A : outRightWave : B) Where A and B are bidirectional blocks.","title":"Usage"},{"location":"libs/physmodels/#pmout","text":"Sends the signal of right and left going waves to the output channel of the chain .","title":"(pm.)out"},{"location":"libs/physmodels/#usage_10","text":"chain(A : out : B) Where A and B are bidirectional blocks.","title":"Usage"},{"location":"libs/physmodels/#pmterminations","text":"Creates terminations on both sides of a chain without closing the inputs and outputs of the bidirectional signals chain. As for chain , this function adds a 1 sample delay to the bidirectional signal, both ways. Of course, this function can be nested within a chain .","title":"(pm.)terminations"},{"location":"libs/physmodels/#usage_11","text":"terminations(a,b,c) with{ };","title":"Usage"},{"location":"libs/physmodels/#pmltermination","text":"Creates a termination on the left side of a chain without closing the inputs and outputs of the bidirectional signals chain. This function adds a 1 sample delay near the termination and can be nested within another chain .","title":"(pm.)lTermination"},{"location":"libs/physmodels/#usage_12","text":"lTerminations(a,b) with{ };","title":"Usage"},{"location":"libs/physmodels/#pmrtermination","text":"Creates a termination on the right side of a chain without closing the inputs and outputs of the bidirectional signals chain. This function adds a 1 sample delay near the termination and can be nested within another chain .","title":"(pm.)rTermination"},{"location":"libs/physmodels/#usage_13","text":"rTerminations(b,c) with{ };","title":"Usage"},{"location":"libs/physmodels/#pmcloseins","text":"Closes the inputs of a bidirectional chain in all directions.","title":"(pm.)closeIns"},{"location":"libs/physmodels/#usage_14","text":"closeIns : chain(...) : _,_,_","title":"Usage"},{"location":"libs/physmodels/#pmcloseouts","text":"Closes the outputs of a bidirectional chain in all directions except for the main signal output (3d output).","title":"(pm.)closeOuts"},{"location":"libs/physmodels/#usage_15","text":"_,_,_ : chain(...) : _","title":"Usage"},{"location":"libs/physmodels/#pmendchain","text":"Closes the inputs and outputs of a bidirectional chain in all directions except for the main signal output (3d output).","title":"(pm.)endChain"},{"location":"libs/physmodels/#usage_16","text":"endChain(chain(...)) : _","title":"Usage"},{"location":"libs/physmodels/#basic-elements","text":"Basic elements for physical modeling (e.g., waveguides, specific filters, etc.).","title":"Basic Elements"},{"location":"libs/physmodels/#pmwaveguiden","text":"A series of waveguide functions based on various types of delays (see fdelay[n] ).","title":"(pm.)waveguideN"},{"location":"libs/physmodels/#list-of-functions","text":"waveguideUd : unit delay waveguide waveguideFd : fractional delay waveguide waveguideFd2 : second order fractional delay waveguide waveguideFd4 : fourth order fractional delay waveguide","title":"List of functions"},{"location":"libs/physmodels/#usage_17","text":"chain(A : waveguideUd(nMax,n) : B) Where: nMax : the maximum length of the delays in the waveguide n : the length of the delay lines in samples.","title":"Usage"},{"location":"libs/physmodels/#pmwaveguide","text":"Standard pm.lib waveguide (based on waveguideFd4 ).","title":"(pm.)waveguide"},{"location":"libs/physmodels/#usage_18","text":"chain(A : waveguide(nMax,n) : B) Where: nMax : the maximum length of the delays in the waveguide n : the length of the delay lines in samples.","title":"Usage"},{"location":"libs/physmodels/#pmbridgefilter","text":"Generic two zeros bridge FIR filter (as implemented in the STK ) that can be used to implement the reflectance violin, guitar, etc. bridges.","title":"(pm.)bridgeFilter"},{"location":"libs/physmodels/#usage_19","text":"_ : bridge(brightness,absorption) : _ Where: brightness : controls the damping of high frequencies (0-1) absorption : controls the absorption of the brige and thus the t60 of the string plugged to it (0-1) (1 = 20 seconds)","title":"Usage"},{"location":"libs/physmodels/#pmmodefilter","text":"Resonant bandpass filter that can be used to implement a single resonance (mode).","title":"(pm.)modeFilter"},{"location":"libs/physmodels/#usage_20","text":"_ : modeFilter(freq,t60,gain) : _ Where: freq : mode frequency t60 : mode resonance duration (in seconds) gain : mode gain (0-1)","title":"Usage"},{"location":"libs/physmodels/#string-instruments","text":"Low and high level string instruments parts. Most of the elements in this section can be used in a bidirectional chain.","title":"String Instruments"},{"location":"libs/physmodels/#pmstringsegment","text":"A string segment without terminations (just a simple waveguide).","title":"(pm.)stringSegment"},{"location":"libs/physmodels/#usage_21","text":"chain(A : stringSegment(maxLength,length) : B) Where: maxLength : the maximum length of the string in meters (should be static) length : the length of the string in meters","title":"Usage"},{"location":"libs/physmodels/#pmopenstring","text":"A bidirectional block implementing a basic \"generic\" string with a selectable excitation position. Lowpass filters are built-in and allow to simulate the effect of dispersion on the sound and thus to change the \"stiffness\" of the string.","title":"(pm.)openString"},{"location":"libs/physmodels/#usage_22","text":"chain(... : openString(length,stiffness,pluckPosition,excitation) : ...) Where: length : the length of the string in meters stiffness : the stiffness of the string (0-1) (1 for max stiffness) pluckPosition : excitation position (0-1) (1 is bottom) excitation : the excitation signal","title":"Usage"},{"location":"libs/physmodels/#pmnylonstring","text":"A bidirectional block implementing a basic nylon string with selectable excitation position. This element is based on openString and has a fix stiffness corresponding to that of a nylon string.","title":"(pm.)nylonString"},{"location":"libs/physmodels/#usage_23","text":"chain(... : nylonString(length,pluckPosition,excitation) : ...) Where: length : the length of the string in meters pluckPosition : excitation position (0-1) (1 is bottom) excitation : the excitation signal","title":"Usage"},{"location":"libs/physmodels/#pmsteelstring","text":"A bidirectional block implementing a basic steel string with selectable excitation position. This element is based on openString and has a fix stiffness corresponding to that of a steel string.","title":"(pm.)steelString"},{"location":"libs/physmodels/#usage_24","text":"chain(... : steelString(length,pluckPosition,excitation) : ...) Where: length : the length of the string in meters pluckPosition : excitation position (0-1) (1 is bottom) excitation : the excitation signal","title":"Usage"},{"location":"libs/physmodels/#pmopenstringpick","text":"A bidirectional block implementing a \"generic\" string with selectable excitation position. It also has a built-in pickup whose position is the same as the excitation position. Thus, moving the excitation position will also move the pickup.","title":"(pm.)openStringPick"},{"location":"libs/physmodels/#usage_25","text":"chain(... : openStringPick(length,stiffness,pluckPosition,excitation) : ...) Where: length : the length of the string in meters stiffness : the stiffness of the string (0-1) (1 for max stiffness) pluckPosition : excitation position (0-1) (1 is bottom) excitation : the excitation signal","title":"Usage"},{"location":"libs/physmodels/#pmopenstringpickup","text":"A bidirectional block implementing a \"generic\" string with selectable excitation position and stiffness. It also has a built-in pickup whose position can be independenly selected. The only constraint is that the pickup has to be placed after the excitation position.","title":"(pm.)openStringPickUp"},{"location":"libs/physmodels/#usage_26","text":"chain(... : openStringPickUp(length,stiffness,pluckPosition,excitation) : ...) Where: length : the length of the string in meters stiffness : the stiffness of the string (0-1) (1 for max stiffness) pluckPosition : pluck position between the top of the string and the pickup (0-1) (1 for same as pickup position) pickupPosition : position of the pickup on the string (0-1) (1 is bottom) excitation : the excitation signal","title":"Usage"},{"location":"libs/physmodels/#pmopenstringpickdown","text":"A bidirectional block implementing a \"generic\" string with selectable excitation position and stiffness. It also has a built-in pickup whose position can be independenly selected. The only constraint is that the pickup has to be placed before the excitation position.","title":"(pm.)openStringPickDown"},{"location":"libs/physmodels/#usage_27","text":"chain(... : openStringPickDown(length,stiffness,pluckPosition,excitation) : ...) Where: length : the length of the string in meters stiffness : the stiffness of the string (0-1) (1 for max stiffness) pluckPosition : pluck position on the string (0-1) (1 is bottom) pickupPosition : position of the pickup between the top of the string and the excitation position (0-1) (1 is excitation position) excitation : the excitation signal","title":"Usage"},{"location":"libs/physmodels/#pmksreflexionfilter","text":"The \"typical\" one-zero Karplus-strong feedforward reflexion filter. This filter will be typically used in a termination (see below).","title":"(pm.)ksReflexionFilter"},{"location":"libs/physmodels/#usage_28","text":"terminations(_,chain(...),ksReflexionFilter)","title":"Usage"},{"location":"libs/physmodels/#pmrstringrigidtermination","text":"Bidirectional block implementing a right rigid string termination (no damping, just phase inversion).","title":"(pm.)rStringRigidTermination"},{"location":"libs/physmodels/#usage_29","text":"chain(rStringRigidTermination : stringSegment : ...)","title":"Usage"},{"location":"libs/physmodels/#pmlstringrigidtermination","text":"Bidirectional block implementing a left rigid string termination (no damping, just phase inversion).","title":"(pm.)lStringRigidTermination"},{"location":"libs/physmodels/#usage_30","text":"chain(... : stringSegment : lStringRigidTermination)","title":"Usage"},{"location":"libs/physmodels/#pmelecguitarbridge","text":"Bidirectional block implementing a simple electric guitar bridge. This block is based on bridgeFilter . The bridge doesn't implement transmittance since it is not meant to be connected to a body (unlike acoustic guitar). It also partially sets the resonance duration of the string with the nuts used on the other side.","title":"(pm.)elecGuitarBridge"},{"location":"libs/physmodels/#usage_31","text":"chain(... : stringSegment : elecGuitarBridge)","title":"Usage"},{"location":"libs/physmodels/#pmelecguitarnuts","text":"Bidirectional block implementing a simple electric guitar nuts. This block is based on bridgeFilter and does essentially the same thing as elecGuitarBridge , but on the other side of the chain. It also partially sets the resonance duration of the string with the bridge used on the other side.","title":"(pm.)elecGuitarNuts"},{"location":"libs/physmodels/#usage_32","text":"chain(elecGuitarNuts : stringSegment : ...)","title":"Usage"},{"location":"libs/physmodels/#pmguitarbridge","text":"Bidirectional block implementing a simple acoustic guitar bridge. This bridge damps more hight frequencies than elecGuitarBridge and implements a transmittance filter. It also partially sets the resonance duration of the string with the nuts used on the other side.","title":"(pm.)guitarBridge"},{"location":"libs/physmodels/#usage_33","text":"chain(... : stringSegment : guitarBridge)","title":"Usage"},{"location":"libs/physmodels/#pmguitarnuts","text":"Bidirectional block implementing a simple acoustic guitar nuts. This nuts damps more hight frequencies than elecGuitarNuts and implements a transmittance filter. It also partially sets the resonance duration of the string with the bridge used on the other side.","title":"(pm.)guitarNuts"},{"location":"libs/physmodels/#usage_34","text":"chain(guitarNuts : stringSegment : ...)","title":"Usage"},{"location":"libs/physmodels/#pmidealstring","text":"An \"ideal\" string with rigid terminations and where the plucking position and the pick-up position are the same. Since terminations are rigid, this string will ring forever.","title":"(pm.)idealString"},{"location":"libs/physmodels/#usage_35","text":"1-1' : idealString(length,reflexion,xPosition,excitation) With: * length : the length of the string in meters * pluckPosition : the plucking position (0.001-0.999) * excitation : the input signal for the excitation.","title":"Usage"},{"location":"libs/physmodels/#pmks","text":"A Karplus-Strong string (in that case, the string is implemented as a one dimension waveguide).","title":"(pm.)ks"},{"location":"libs/physmodels/#usage_36","text":"ks(length,damping,excitation) : _ Where: length : the length of the string in meters damping : string damping (0-1) excitation : excitation signal","title":"Usage"},{"location":"libs/physmodels/#pmks_ui_midi","text":"Ready-to-use, MIDI-enabled Karplus-Strong string with buil-in UI.","title":"(pm.)ks_ui_MIDI"},{"location":"libs/physmodels/#usage_37","text":"ks_ui_MIDI : _","title":"Usage"},{"location":"libs/physmodels/#pmelecguitarmodel","text":"A simple electric guitar model (without audio effects, of course) with selectable pluck position. This model implements a single string. Additional strings should be created by making a polyphonic applications out of this function. Pitch is changed by changing the length of the string and not through a finger model.","title":"(pm.)elecGuitarModel"},{"location":"libs/physmodels/#usage_38","text":"elecGuitarModel(length,pluckPosition,mute,excitation) : _ Where: length : the length of the string in meters pluckPosition : pluck position (0-1) (1 is on the bridge) mute : mute coefficient (1 for no mute and 0 for instant mute) excitation : excitation signal","title":"Usage"},{"location":"libs/physmodels/#pmelecguitar","text":"A simple electric guitar model with steel strings (based on elecGuitarModel ) implementing an excitation model. This model implements a single string. Additional strings should be created by making a polyphonic applications out of this function.","title":"(pm.)elecGuitar"},{"location":"libs/physmodels/#usage_39","text":"elecGuitar(length,pluckPosition,trigger) : _ Where: length : the length of the string in meters pluckPosition : pluck position (0-1) (1 is on the bridge) mute : mute coefficient (1 for no mute and 0 for instant mute) gain : gain of the pluck (0-1) trigger : trigger signal (1 for on, 0 for off)","title":"Usage"},{"location":"libs/physmodels/#pmelecguitar_ui_midi","text":"Ready-to-use MIDI-enabled electric guitar physical model with built-in UI.","title":"(pm.)elecGuitar_ui_MIDI"},{"location":"libs/physmodels/#usage_40","text":"elecGuitar_ui_MIDI : _","title":"Usage"},{"location":"libs/physmodels/#pmguitarbody","text":"WARNING: not implemented yet! Bidirectional block implementing a simple acoustic guitar body.","title":"(pm.)guitarBody"},{"location":"libs/physmodels/#usage_41","text":"chain(... : guitarBody)","title":"Usage"},{"location":"libs/physmodels/#pmguitarmodel","text":"A simple acoustic guitar model with steel strings and selectable excitation position. This model implements a single string. Additional strings should be created by making a polyphonic applications out of this function. Pitch is changed by changing the length of the string and not through a finger model. WARNING: this function doesn't currently implement a body (just strings and bridge).","title":"(pm.)guitarModel"},{"location":"libs/physmodels/#usage_42","text":"guitarModel(length,pluckPosition,excitation) : _ Where: length : the length of the string in meters pluckPosition : pluck position (0-1) (1 is on the bridge) excitation : excitation signal","title":"Usage"},{"location":"libs/physmodels/#pmguitar","text":"A simple acoustic guitar model with steel strings (based on guitarModel ) implementing an excitation model. This model implements a single string. Additional strings should be created by making a polyphonic applications out of this function.","title":"(pm.)guitar"},{"location":"libs/physmodels/#usage_43","text":"guitar(length,pluckPosition,trigger) : _ Where: length : the length of the string in meters pluckPosition : pluck position (0-1) (1 is on the bridge) gain : gain of the excitation trigger : trigger signal (1 for on, 0 for off)","title":"Usage"},{"location":"libs/physmodels/#pmguitar_ui_midi","text":"Ready-to-use MIDI-enabled steel strings acoustic guitar physical model with built-in UI.","title":"(pm.)guitar_ui_MIDI"},{"location":"libs/physmodels/#usage_44","text":"guitar_ui_MIDI : _","title":"Usage"},{"location":"libs/physmodels/#pmnylonguitarmodel","text":"A simple acoustic guitar model with nylon strings and selectable excitation position. This model implements a single string. Additional strings should be created by making a polyphonic applications out of this function. Pitch is changed by changing the length of the string and not through a finger model. WARNING: this function doesn't currently implement a body (just strings and bridge).","title":"(pm.)nylonGuitarModel"},{"location":"libs/physmodels/#usage_45","text":"nylonGuitarModel(length,pluckPosition,excitation) : _ Where: length : the length of the string in meters pluckPosition : pluck position (0-1) (1 is on the bridge) excitation : excitation signal","title":"Usage"},{"location":"libs/physmodels/#pmnylonguitar","text":"A simple acoustic guitar model with nylon strings (based on nylonGuitarModel ) implementing an excitation model. This model implements a single string. Additional strings should be created by making a polyphonic applications out of this function.","title":"(pm.)nylonGuitar"},{"location":"libs/physmodels/#usage_46","text":"nylonGuitar(length,pluckPosition,trigger) : _ Where: length : the length of the string in meters pluckPosition : pluck position (0-1) (1 is on the bridge) gain : gain of the excitation (0-1) trigger : trigger signal (1 for on, 0 for off)","title":"Usage"},{"location":"libs/physmodels/#pmnylonguitar_ui_midi","text":"Ready-to-use MIDI-enabled nylon strings acoustic guitar physical model with built-in UI.","title":"(pm.)nylonGuitar_ui_MIDI"},{"location":"libs/physmodels/#usage_47","text":"nylonGuitar_ui_MIDI : _","title":"Usage"},{"location":"libs/physmodels/#pmmodeinterpres","text":"Modular string instrument resonator based on IR measurements made on 3D printed models. The 2D space allowing for the control of the shape and the scale of the model is enabled by interpolating between modes parameters. More information about this technique/project can be found here: * https://ccrma.stanford.edu/~rmichon/3dPrintingModeling/ .","title":"(pm.)modeInterpRes"},{"location":"libs/physmodels/#usage_48","text":"_ : modeInterpRes(nModes,x,y) : _ Where: nModes : number of modeled modes (40 max) x : shape of the resonator (0: square, 1: square with rounded corners, 2: round) y : scale of the resonator (0: small, 1: medium, 2: large)","title":"Usage"},{"location":"libs/physmodels/#pmmodularinterpbody","text":"Bidirectional block implementing a modular string instrument resonator (see modeInterpRes ).","title":"(pm.)modularInterpBody"},{"location":"libs/physmodels/#usage_49","text":"chain(... : modularInterpBody(nModes,shape,scale) : ...) Where: nModes : number of modeled modes (40 max) shape : shape of the resonator (0: square, 1: square with rounded corners, 2: round) scale : scale of the resonator (0: small, 1: medium, 2: large)","title":"Usage"},{"location":"libs/physmodels/#pmmodularinterpstringmodel","text":"String instrument model with a modular body (see modeInterpRes and * https://ccrma.stanford.edu/~rmichon/3dPrintingModeling/ ).","title":"(pm.)modularInterpStringModel"},{"location":"libs/physmodels/#usage_50","text":"modularInterpStringModel(length,pluckPosition,shape,scale,bodyExcitation,stringExcitation) : _ Where: stringLength : the length of the string in meters pluckPosition : pluck position (0-1) (1 is on the bridge) shape : shape of the resonator (0: square, 1: square with rounded corners, 2: round) scale : scale of the resonator (0: small, 1: medium, 2: large) bodyExcitation : excitation signal for the body stringExcitation : excitation signal for the string","title":"Usage"},{"location":"libs/physmodels/#pmmodularinterpinstr","text":"String instrument with a modular body (see modeInterpRes and * https://ccrma.stanford.edu/~rmichon/3dPrintingModeling/ ).","title":"(pm.)modularInterpInstr"},{"location":"libs/physmodels/#usage_51","text":"modularInterpInstr(stringLength,pluckPosition,shape,scale,gain,tapBody,triggerString) : _ Where: stringLength : the length of the string in meters pluckPosition : pluck position (0-1) (1 is on the bridge) shape : shape of the resonator (0: square, 1: square with rounded corners, 2: round) scale : scale of the resonator (0: small, 1: medium, 2: large) gain : of the string excitation tapBody : send an impulse in the body of the instrument where the string is connected (1 for on, 0 for off) triggerString : trigger signal for the string (1 for on, 0 for off)","title":"Usage"},{"location":"libs/physmodels/#pmmodularinterpinstr_ui_midi","text":"Ready-to-use MIDI-enabled string instrument with a modular body (see modeInterpRes and * https://ccrma.stanford.edu/~rmichon/3dPrintingModeling/ ) with built-in UI.","title":"(pm.)modularInterpInstr_ui_MIDI"},{"location":"libs/physmodels/#usage_52","text":"modularInterpInstr_ui_MIDI : _","title":"Usage"},{"location":"libs/physmodels/#bowed-string-instruments","text":"Low and high level basic string instruments parts. Most of the elements in this section can be used in a bidirectional chain.","title":"Bowed String Instruments"},{"location":"libs/physmodels/#pmbowtable","text":"Extremely basic bow table that can be used to implement a wide range of bow types for many different bowed string instruments (violin, cello, etc.).","title":"(pm.)bowTable"},{"location":"libs/physmodels/#usage_53","text":"excitation : bowTable(offeset,slope) : _ Where: excitation : an excitation signal offset : table offset slope : table slope","title":"Usage"},{"location":"libs/physmodels/#pmviolinbowtable","text":"Violin bow table based on bowTable .","title":"(pm.)violinBowTable"},{"location":"libs/physmodels/#usage_54","text":"bowVelocity : violinBowTable(bowPressure) : _ Where: bowVelocity : velocity of the bow/excitation signal (0-1) bowPressure : bow pressure on the string (0-1)","title":"Usage"},{"location":"libs/physmodels/#pmbowinteraction","text":"Bidirectional block implementing the interaction of a bow in a chain .","title":"(pm.)bowInteraction"},{"location":"libs/physmodels/#usage_55","text":"chain(... : stringSegment : bowInteraction(bowTable) : stringSegment : ...) Where: bowTable : the bow table","title":"Usage"},{"location":"libs/physmodels/#pmviolinbow","text":"Bidirectional block implementing a violin bow and its interaction with a string.","title":"(pm.)violinBow"},{"location":"libs/physmodels/#usage_56","text":"chain(... : stringSegment : violinBow(bowPressure,bowVelocity) : stringSegment : ...) Where: bowVelocity : velocity of the bow / excitation signal (0-1) bowPressure : bow pressure on the string (0-1)","title":"Usage"},{"location":"libs/physmodels/#pmviolinbowedstring","text":"Violin bowed string bidirectional block with controllable bow position. Terminations are not implemented in this model.","title":"(pm.)violinBowedString"},{"location":"libs/physmodels/#usage_57","text":"chain(nuts : violinBowedString(stringLength,bowPressure,bowVelocity,bowPosition) : bridge) Where: stringLength : the length of the string in meters bowVelocity : velocity of the bow / excitation signal (0-1) bowPressure : bow pressure on the string (0-1) bowPosition : the position of the bow on the string (0-1)","title":"Usage"},{"location":"libs/physmodels/#pmviolinnuts","text":"Bidirectional block implementing simple violin nuts. This function is based on bridgeFilter .","title":"(pm.)violinNuts"},{"location":"libs/physmodels/#usage_58","text":"chain(violinNuts : stringSegment : ...)","title":"Usage"},{"location":"libs/physmodels/#pmviolinbridge","text":"Bidirectional block implementing a simple violin bridge. This function is based on bridgeFilter .","title":"(pm.)violinBridge"},{"location":"libs/physmodels/#usage_59","text":"chain(... : stringSegment : violinBridge","title":"Usage"},{"location":"libs/physmodels/#pmviolinbody","text":"Bidirectional block implementing a simple violin body (just a simple resonant lowpass filter).","title":"(pm.)violinBody"},{"location":"libs/physmodels/#usage_60","text":"chain(... : stringSegment : violinBridge : violinBody)","title":"Usage"},{"location":"libs/physmodels/#pmviolinmodel","text":"Ready-to-use simple violin physical model. This model implements a single string. Additional strings should be created by making a polyphonic applications out of this function. Pitch is changed by changing the length of the string (and not through a finger model).","title":"(pm.)violinModel"},{"location":"libs/physmodels/#usage_61","text":"violinModel(stringLength,bowPressure,bowVelocity,bridgeReflexion, bridgeAbsorption,bowPosition) : _ Where: stringLength : the length of the string in meters bowVelocity : velocity of the bow / excitation signal (0-1) bowPressure : bow pressure on the string (0-1)) bowPosition : the position of the bow on the string (0-1)","title":"Usage"},{"location":"libs/physmodels/#pmviolin_ui","text":"Ready-to-use violin physical model with built-in UI.","title":"(pm.)violin_ui"},{"location":"libs/physmodels/#usage_62","text":"violinModel_ui : _","title":"Usage"},{"location":"libs/physmodels/#pmviolin_ui_midi","text":"Ready-to-use MIDI-enabled violin physical model with built-in UI.","title":"(pm.)violin_ui_MIDI"},{"location":"libs/physmodels/#usage_63","text":"violin_ui_MIDI : _","title":"Usage"},{"location":"libs/physmodels/#wind-instruments","text":"Low and high level basic wind instruments parts. Most of the elements in this section can be used in a bidirectional chain.","title":"Wind Instruments"},{"location":"libs/physmodels/#pmopentube","text":"A tube segment without terminations (same as stringSegment ).","title":"(pm.)openTube"},{"location":"libs/physmodels/#usage_64","text":"chain(A : openTube(maxLength,length) : B) Where: maxLength : the maximum length of the tube in meters (should be static) length : the length of the tube in meters","title":"Usage"},{"location":"libs/physmodels/#pmreedtable","text":"Extremely basic reed table that can be used to implement a wide range of single reed types for many different instruments (saxophone, clarinet, etc.).","title":"(pm.)reedTable"},{"location":"libs/physmodels/#usage_65","text":"excitation : reedTable(offeset,slope) : _ Where: excitation : an excitation signal offset : table offset slope : table slope","title":"Usage"},{"location":"libs/physmodels/#pmflutejettable","text":"Extremely basic flute jet table.","title":"(pm.)fluteJetTable"},{"location":"libs/physmodels/#usage_66","text":"excitation : fluteJetTable : _ Where: excitation : an excitation signal","title":"Usage"},{"location":"libs/physmodels/#pmbrasslipstable","text":"Simple brass lips/mouthpiece table. Since this implementation is very basic and that the lips and tube of the instrument are coupled to each other, the length of that tube must be provided here.","title":"(pm.)brassLipsTable"},{"location":"libs/physmodels/#usage_67","text":"excitation : brassLipsTable(tubeLength,lipsTension) : _ Where: excitation : an excitation signal (can be DC) tubeLength : length in meters of the tube connected to the mouthpiece lipsTension : tension of the lips (0-1) (default: 0.5)","title":"Usage"},{"location":"libs/physmodels/#pmclarinetreed","text":"Clarinet reed based on reedTable with controllable stiffness.","title":"(pm.)clarinetReed"},{"location":"libs/physmodels/#usage_68","text":"excitation : clarinetReed(stiffness) : _ Where: excitation : an excitation signal stiffness : reed stiffness (0-1)","title":"Usage"},{"location":"libs/physmodels/#pmclarinetmouthpiece","text":"Bidirectional block implementing a clarinet mouthpiece as well as the various interactions happening with traveling waves. This element is ready to be plugged to a tube...","title":"(pm.)clarinetMouthPiece"},{"location":"libs/physmodels/#usage_69","text":"chain(clarinetMouthPiece(reedStiffness,pressure) : tube : etc.) Where: pressure : the pressure of the air flow (DC) created by the virtual performer (0-1). This can also be any kind of signal that will directly injected in the mouthpiece (e.g., breath noise, etc.). reedStiffness : reed stiffness (0-1)","title":"Usage"},{"location":"libs/physmodels/#pmbrasslips","text":"Bidirectional block implementing a brass mouthpiece as well as the various interactions happening with traveling waves. This element is ready to be plugged to a tube...","title":"(pm.)brassLips"},{"location":"libs/physmodels/#usage_70","text":"chain(brassLips(tubeLength,lipsTension,pressure) : tube : etc.) Where: tubeLength : length in meters of the tube connected to the mouthpiece lipsTension : tension of the lips (0-1) (default: 0.5) pressure : the pressure of the air flow (DC) created by the virtual performer (0-1). This can also be any kind of signal that will directly injected in the mouthpiece (e.g., breath noise, etc.).","title":"Usage"},{"location":"libs/physmodels/#pmfluteembouchure","text":"Bidirectional block implementing a flute embouchure as well as the various interactions happening with traveling waves. This element is ready to be plugged between tubes segments...","title":"(pm.)fluteEmbouchure"},{"location":"libs/physmodels/#usage_71","text":"chain(... : tube : fluteEmbouchure(pressure) : tube : etc.) Where: pressure : the pressure of the air flow (DC) created by the virtual performer (0-1). This can also be any kind of signal that will directly injected in the mouthpiece (e.g., breath noise, etc.).","title":"Usage"},{"location":"libs/physmodels/#pmwbell","text":"Generic wind instrument bell bidirectional block that should be placed at the end of a chain .","title":"(pm.)wBell"},{"location":"libs/physmodels/#usage_72","text":"chain(... : wBell(opening)) Where: opening : the \"opening\" of bell (0-1)","title":"Usage"},{"location":"libs/physmodels/#pmflutehead","text":"Simple flute head implementing waves reflexion.","title":"(pm.)fluteHead"},{"location":"libs/physmodels/#usage_73","text":"chain(fluteHead : tube : ...)","title":"Usage"},{"location":"libs/physmodels/#pmflutefoot","text":"Simple flute foot implementing waves reflexion and dispersion.","title":"(pm.)fluteFoot"},{"location":"libs/physmodels/#usage_74","text":"chain(... : tube : fluteFoot)","title":"Usage"},{"location":"libs/physmodels/#pmclarinetmodel","text":"A simple clarinet physical model without tone holes (pitch is changed by changing the length of the tube of the instrument).","title":"(pm.)clarinetModel"},{"location":"libs/physmodels/#usage_75","text":"clarinetModel(length,pressure,reedStiffness,bellOpening) : _ Where: tubeLength : the length of the tube in meters pressure : the pressure of the air flow created by the virtual performer (0-1). This can also be any kind of signal that will directly injected in the mouthpiece (e.g., breath noise, etc.). reedStiffness : reed stiffness (0-1) bellOpening : the opening of bell (0-1)","title":"Usage"},{"location":"libs/physmodels/#pmclarinetmodel_ui","text":"Same as clarinetModel but with a built-in UI. This function doesn't implement a virtual \"blower\", thus pressure remains an argument here.","title":"(pm.)clarinetModel_ui"},{"location":"libs/physmodels/#usage_76","text":"clarinetModel_ui(pressure) : _ Where: pressure : the pressure of the air flow created by the virtual performer (0-1). This can also be any kind of signal that will be directly injected in the mouthpiece (e.g., breath noise, etc.).","title":"Usage"},{"location":"libs/physmodels/#pmclarinet_ui","text":"Ready-to-use clarinet physical model with built-in UI based on clarinetModel .","title":"(pm.)clarinet_ui"},{"location":"libs/physmodels/#usage_77","text":"clarinet_ui : _","title":"Usage"},{"location":"libs/physmodels/#pmclarinet_ui_midi","text":"Ready-to-use MIDI compliant clarinet physical model with built-in UI.","title":"(pm.)clarinet_ui_MIDI"},{"location":"libs/physmodels/#usage_78","text":"clarinet_ui_MIDI : _","title":"Usage"},{"location":"libs/physmodels/#pmbrassmodel","text":"A simple generic brass instrument physical model without pistons (pitch is changed by changing the length of the tube of the instrument). This model is kind of hard to control and might not sound very good if bad parameters are given to it...","title":"(pm.)brassModel"},{"location":"libs/physmodels/#usage_79","text":"brassModel(tubeLength,lipsTension,mute,pressure) : _ Where: tubeLength : the length of the tube in meters lipsTension : tension of the lips (0-1) (default: 0.5) mute : mute opening at the end of the instrument (0-1) (default: 0.5) pressure : the pressure of the air flow created by the virtual performer (0-1). This can also be any kind of signal that will directly injected in the mouthpiece (e.g., breath noise, etc.).","title":"Usage"},{"location":"libs/physmodels/#pmbrassmodel_ui","text":"Same as brassModel but with a built-in UI. This function doesn't implement a virtual \"blower\", thus pressure remains an argument here.","title":"(pm.)brassModel_ui"},{"location":"libs/physmodels/#usage_80","text":"brassModel_ui(pressure) : _ Where: pressure : the pressure of the air flow created by the virtual performer (0-1). This can also be any kind of signal that will be directly injected in the mouthpiece (e.g., breath noise, etc.).","title":"Usage"},{"location":"libs/physmodels/#pmbrass_ui","text":"Ready-to-use brass instrument physical model with built-in UI based on brassModel .","title":"(pm.)brass_ui"},{"location":"libs/physmodels/#usage_81","text":"brass_ui : _","title":"Usage"},{"location":"libs/physmodels/#pmbrass_ui_midi","text":"Ready-to-use MIDI-controllable brass instrument physical model with built-in UI.","title":"(pm.)brass_ui_MIDI"},{"location":"libs/physmodels/#usage_82","text":"brass_ui_MIDI : _","title":"Usage"},{"location":"libs/physmodels/#pmflutemodel","text":"A simple generic flute instrument physical model without tone holes (pitch is changed by changing the length of the tube of the instrument).","title":"(pm.)fluteModel"},{"location":"libs/physmodels/#usage_83","text":"fluteModel(tubeLength,mouthPosition,pressure) : _ Where: tubeLength : the length of the tube in meters mouthPosition : position of the mouth on the embouchure (0-1) (default: 0.5) pressure : the pressure of the air flow created by the virtual performer (0-1). This can also be any kind of signal that will directly injected in the mouthpiece (e.g., breath noise, etc.).","title":"Usage"},{"location":"libs/physmodels/#pmflutemodel_ui","text":"Same as fluteModel but with a built-in UI. This function doesn't implement a virtual \"blower\", thus pressure remains an argument here.","title":"(pm.)fluteModel_ui"},{"location":"libs/physmodels/#usage_84","text":"fluteModel_ui(pressure) : _ Where: pressure : the pressure of the air flow created by the virtual performer (0-1). This can also be any kind of signal that will be directly injected in the mouthpiece (e.g., breath noise, etc.).","title":"Usage"},{"location":"libs/physmodels/#pmflute_ui","text":"Ready-to-use flute physical model with built-in UI based on fluteModel .","title":"(pm.)flute_ui"},{"location":"libs/physmodels/#usage_85","text":"flute_ui : _","title":"Usage"},{"location":"libs/physmodels/#pmflute_ui_midi","text":"Ready-to-use MIDI-controllable flute physical model with built-in UI.","title":"(pm.)flute_ui_MIDI"},{"location":"libs/physmodels/#usage_86","text":"flute_ui_MIDI : _","title":"Usage"},{"location":"libs/physmodels/#exciters","text":"Various kind of excitation signal generators.","title":"Exciters"},{"location":"libs/physmodels/#pmimpulseexcitation","text":"Creates an impulse excitation of one sample.","title":"(pm.)impulseExcitation"},{"location":"libs/physmodels/#usage_87","text":"gate = button('gate'); impulseExcitation(gate) : chain; Where: gate : a gate button","title":"Usage"},{"location":"libs/physmodels/#pmstrikemodel","text":"Creates a filtered noise excitation.","title":"(pm.)strikeModel"},{"location":"libs/physmodels/#usage_88","text":"gate = button('gate'); strikeModel(LPcutoff,HPcutoff,sharpness,gain,gate) : chain; Where: HPcutoff : highpass cutoff frequency LPcutoff : lowpass cutoff frequency sharpness : sharpness of the attack and release (0-1) gain : gain of the excitation gate : a gate button/trigger signal (0/1)","title":"Usage"},{"location":"libs/physmodels/#pmstrike","text":"Strikes generator with controllable excitation position.","title":"(pm.)strike"},{"location":"libs/physmodels/#usage_89","text":"gate = button('gate'); strike(exPos,sharpness,gain,gate) : chain; Where: exPos : excitation position wiht 0: for max low freqs and 1: for max high freqs. So, on membrane for example, 0 would be the middle and 1 the edge sharpness : sharpness of the attack and release (0-1) gain : gain of the excitation gate : a gate button/trigger signal (0/1)","title":"Usage"},{"location":"libs/physmodels/#pmpluckstring","text":"Creates a plucking excitation signal.","title":"(pm.)pluckString"},{"location":"libs/physmodels/#usage_90","text":"trigger = button('gate'); pluckString(stringLength,cutoff,maxFreq,sharpness,trigger) Where: stringLength : length of the string to pluck cutoff : cutoff ratio (1 for default) maxFreq : max frequency ratio (1 for default) sharpness : sharpness of the attack and release (1 for default) gain : gain of the excitation (0-1) trigger : trigger signal (1 for on, 0 for off)","title":"Usage"},{"location":"libs/physmodels/#pmblower","text":"A virtual blower creating a DC signal with some breath noise in it.","title":"(pm.)blower"},{"location":"libs/physmodels/#usage_91","text":"blower(pressure,breathGain,breathCutoff) : _ Where: pressure : pressure (0-1) breathGain : breath noise gain (0-1) (recommended: 0.005) breathCutoff : breath cuttoff frequency (Hz) (recommended: 2000)","title":"Usage"},{"location":"libs/physmodels/#pmblower_ui","text":"Same as blower but with a built-in UI.","title":"(pm.)blower_ui"},{"location":"libs/physmodels/#usage_92","text":"blower : somethingToBeBlown","title":"Usage"},{"location":"libs/physmodels/#modal-percussions","text":"High and low level functions for modal synthesis of percussion instruments.","title":"Modal Percussions"},{"location":"libs/physmodels/#pmdjembemodel","text":"Dirt-simple djembe modal physical model. Mode parameters are empirically calculated and don't correspond to any measurements or 3D model. They kind of sound good though :).","title":"(pm.)djembeModel"},{"location":"libs/physmodels/#usage_93","text":"excitation : djembeModel(freq) Where: excitation : excitation signal freq : fundamental frequency of the bar","title":"Usage"},{"location":"libs/physmodels/#pmdjembe","text":"Dirt-simple djembe modal physical model. Mode parameters are empirically calculated and don't correspond to any measurements or 3D model. They kind of sound good though :). This model also implements a virtual \"exciter\".","title":"(pm.)djembe"},{"location":"libs/physmodels/#usage_94","text":"djembe(freq,strikePosition,strikeSharpness,gain,trigger) Where: freq : fundamental frequency of the model strikePosition : strike position (0 for the middle of the membrane and 1 for the edge) strikeSharpness : sharpness of the strike (0-1, default: 0.5) gain : gain of the strike trigger : trigger signal (0: off, 1: on)","title":"Usage"},{"location":"libs/physmodels/#pmdjembe_ui_midi","text":"Simple MIDI controllable djembe physical model with built-in UI.","title":"(pm.)djembe_ui_MIDI"},{"location":"libs/physmodels/#usage_95","text":"djembe_ui_MIDI : _","title":"Usage"},{"location":"libs/physmodels/#pmmarimbabarmodel","text":"Generic marimba tone bar modal model. This model was generated using mesh2faust from a 3D CAD model of a marimba tone bar ( libraries/modalmodels/marimbaBar ). The corresponding CAD model is that of a C2 tone bar (original fundamental frequency: ~65Hz). While marimbaBarModel allows to translate the harmonic content of the generated sound by providing a frequency ( freq ), mode transposition has limits and the model will sound less and less like a marimba tone bar as it diverges from C2. To make an accurate model of a marimba, we'd want to have an independent model for each bar... This model contains 5 excitation positions going linearly from the center bottom to the center top of the bar. Obviously, a model with more excitation position could be regenerated using mesh2faust .","title":"(pm.)marimbaBarModel"},{"location":"libs/physmodels/#usage_96","text":"excitation : marimbaBarModel(freq,exPos,t60,t60DecayRatio,t60DecaySlope) Where: excitation : excitation signal freq : fundamental frequency of the bar exPos : excitation position (0-4) t60 : T60 in seconds (recommended value: 0.1) t60DecayRatio : T60 decay ratio (recommended value: 1) t60DecaySlope : T60 decay slope (recommended value: 5)","title":"Usage"},{"location":"libs/physmodels/#pmmarimbarestube","text":"Simple marimba resonance tube.","title":"(pm.)marimbaResTube"},{"location":"libs/physmodels/#usage_97","text":"marimbaResTube(tubeLength,excitation) Where: tubeLength : the length of the tube in meters excitation : the excitation signal (audio in)","title":"Usage"},{"location":"libs/physmodels/#pmmarimbamodel","text":"Simple marimba physical model implementing a single tone bar connected to tube. This model is scalable and can be adapted to any size of bar/tube (see marimbaBarModel to know more about the limitations of this type of system).","title":"(pm.)marimbaModel"},{"location":"libs/physmodels/#usage_98","text":"excitation : marimbaModel(freq,exPos) : _ Where: freq : the frequency of the bar/tube couple exPos : excitation position (0-4)","title":"Usage"},{"location":"libs/physmodels/#pmmarimba","text":"Simple marimba physical model implementing a single tone bar connected to tube. This model is scalable and can be adapted to any size of bar/tube (see marimbaBarModel to know more about the limitations of this type of system). This function also implement a virtual exciter to drive the model.","title":"(pm.)marimba"},{"location":"libs/physmodels/#usage_99","text":"excitation : marimba(freq,strikePosition,strikeCutoff,strikeSharpness,gain,trigger) : _ Where: excitation : the excitation signal freq : the frequency of the bar/tube couple strikePosition : strike position (0-4) strikeCutoff : cuttoff frequency of the strike genarator (recommended: ~7000Hz) strikeSharpness : shaarpness of the strike (recommened: ~0.25) gain : gain of the strike (0-1) trigger signal (0: off, 1: on)","title":"Usage"},{"location":"libs/physmodels/#pmmarimba_ui_midi","text":"Simple MIDI controllable marimba physical model with built-in UI implementing a single tone bar connected to tube. This model is scalable and can be adapted to any size of bar/tube (see marimbaBarModel to know more about the limitations of this type of system).","title":"(pm.)marimba_ui_MIDI"},{"location":"libs/physmodels/#usage_100","text":"marimba_ui_MIDI : _","title":"Usage"},{"location":"libs/physmodels/#pmchurchbellmodel","text":"Generic church bell modal model generated by mesh2faust from libraries/modalmodels/churchBell . Modeled after T. Rossing and R. Perrin, Vibrations of Bells, Applied Acoustics 2, 1987. Model height is 301 mm. This model contains 7 excitation positions going linearly from the bottom to the top of the bell. Obviously, a model with more excitation position could be regenerated using mesh2faust .","title":"(pm.)churchBellModel"},{"location":"libs/physmodels/#usage_101","text":"excitation : churchBellModel(nModes,exPos,t60,t60DecayRatio,t60DecaySlope) Where: excitation : the excitation signal nModes : number of synthesized modes (max: 50) exPos : excitation position (0-6) t60 : T60 in seconds (recommended value: 0.1) t60DecayRatio : T60 decay ratio (recommended value: 1) t60DecaySlope : T60 decay slope (recommended value: 5)","title":"Usage"},{"location":"libs/physmodels/#pmchurchbell","text":"Generic church bell modal model. Modeled after T. Rossing and R. Perrin, Vibrations of Bells, Applied Acoustics 2, 1987. Model height is 301 mm. This model contains 7 excitation positions going linearly from the bottom to the top of the bell. Obviously, a model with more excitation position could be regenerated using mesh2faust . This function also implement a virtual exciter to drive the model.","title":"(pm.)churchBell"},{"location":"libs/physmodels/#usage_102","text":"excitation : churchBell(strikePosition,strikeCutoff,strikeSharpness,gain,trigger) : _ Where: excitation : the excitation signal strikePosition : strike position (0-6) strikeCutoff : cuttoff frequency of the strike genarator (recommended: ~7000Hz) strikeSharpness : shaarpness of the strike (recommened: ~0.25) gain : gain of the strike (0-1) trigger signal (0: off, 1: on)","title":"Usage"},{"location":"libs/physmodels/#pmchurchbell_ui","text":"Church bell physical model based on churchBell with built-in UI.","title":"(pm.)churchBell_ui"},{"location":"libs/physmodels/#usage_103","text":"churchBell_ui : _","title":"Usage"},{"location":"libs/physmodels/#pmenglishbellmodel","text":"English church bell modal model generated by mesh2faust from libraries/modalmodels/englishBell . Modeled after D. Bartocha and . Baron, Influence of Tin Bronze Melting and Pouring Parameters on Its Properties and Bell' Tone, Archives of Foundry Engineering, 2016. Model height is 1 m. This model contains 7 excitation positions going linearly from the bottom to the top of the bell. Obviously, a model with more excitation position could be regenerated using mesh2faust .","title":"(pm.)englishBellModel"},{"location":"libs/physmodels/#usage_104","text":"excitation : englishBellModel(nModes,exPos,t60,t60DecayRatio,t60DecaySlope) Where: excitation : the excitation signal nModes : number of synthesized modes (max: 50) exPos : excitation position (0-6) t60 : T60 in seconds (recommended value: 0.1) t60DecayRatio : T60 decay ratio (recommended value: 1) t60DecaySlope : T60 decay slope (recommended value: 5)","title":"Usage"},{"location":"libs/physmodels/#pmenglishbell","text":"English church bell modal model. Modeled after D. Bartocha and . Baron, Influence of Tin Bronze Melting and Pouring Parameters on Its Properties and Bell' Tone, Archives of Foundry Engineering, 2016. Model height is 1 m. This model contains 7 excitation positions going linearly from the bottom to the top of the bell. Obviously, a model with more excitation position could be regenerated using mesh2faust . This function also implement a virtual exciter to drive the model.","title":"(pm.)englishBell"},{"location":"libs/physmodels/#usage_105","text":"excitation : englishBell(strikePosition,strikeCutoff,strikeSharpness,gain,trigger) : _ Where: excitation : the excitation signal strikePosition : strike position (0-6) strikeCutoff : cuttoff frequency of the strike genarator (recommended: ~7000Hz) strikeSharpness : shaarpness of the strike (recommened: ~0.25) gain : gain of the strike (0-1) trigger signal (0: off, 1: on)","title":"Usage"},{"location":"libs/physmodels/#pmenglishbell_ui","text":"English church bell physical model based on englishBell with built-in UI.","title":"(pm.)englishBell_ui"},{"location":"libs/physmodels/#usage_106","text":"englishBell_ui : _","title":"Usage"},{"location":"libs/physmodels/#pmfrenchbellmodel","text":"French church bell modal model generated by mesh2faust from libraries/modalmodels/frenchBell . Modeled after D. Bartocha and . Baron, Influence of Tin Bronze Melting and Pouring Parameters on Its Properties and Bell' Tone, Archives of Foundry Engineering, 2016. Model height is 1 m. This model contains 7 excitation positions going linearly from the bottom to the top of the bell. Obviously, a model with more excitation position could be regenerated using mesh2faust .","title":"(pm.)frenchBellModel"},{"location":"libs/physmodels/#usage_107","text":"excitation : frenchBellModel(nModes,exPos,t60,t60DecayRatio,t60DecaySlope) Where: excitation : the excitation signal nModes : number of synthesized modes (max: 50) exPos : excitation position (0-6) t60 : T60 in seconds (recommended value: 0.1) t60DecayRatio : T60 decay ratio (recommended value: 1) t60DecaySlope : T60 decay slope (recommended value: 5)","title":"Usage"},{"location":"libs/physmodels/#pmfrenchbell","text":"French church bell modal model. Modeled after D. Bartocha and . Baron, Influence of Tin Bronze Melting and Pouring Parameters on Its Properties and Bell' Tone, Archives of Foundry Engineering, 2016. Model height is 1 m. This model contains 7 excitation positions going linearly from the bottom to the top of the bell. Obviously, a model with more excitation position could be regenerated using mesh2faust . This function also implement a virtual exciter to drive the model.","title":"(pm.)frenchBell"},{"location":"libs/physmodels/#usage_108","text":"excitation : frenchBell(strikePosition,strikeCutoff,strikeSharpness,gain,trigger) : _ Where: excitation : the excitation signal strikePosition : strike position (0-6) strikeCutoff : cuttoff frequency of the strike genarator (recommended: ~7000Hz) strikeSharpness : shaarpness of the strike (recommened: ~0.25) gain : gain of the strike (0-1) trigger signal (0: off, 1: on)","title":"Usage"},{"location":"libs/physmodels/#pmfrenchbell_ui","text":"French church bell physical model based on frenchBell with built-in UI.","title":"(pm.)frenchBell_ui"},{"location":"libs/physmodels/#usage_109","text":"frenchBell_ui : _","title":"Usage"},{"location":"libs/physmodels/#pmgermanbellmodel","text":"German church bell modal model generated by mesh2faust from libraries/modalmodels/germanBell . Modeled after D. Bartocha and . Baron, Influence of Tin Bronze Melting and Pouring Parameters on Its Properties and Bell' Tone, Archives of Foundry Engineering, 2016. Model height is 1 m. This model contains 7 excitation positions going linearly from the bottom to the top of the bell. Obviously, a model with more excitation position could be regenerated using mesh2faust .","title":"(pm.)germanBellModel"},{"location":"libs/physmodels/#usage_110","text":"excitation : germanBellModel(nModes,exPos,t60,t60DecayRatio,t60DecaySlope) Where: excitation : the excitation signal nModes : number of synthesized modes (max: 50) exPos : excitation position (0-6) t60 : T60 in seconds (recommended value: 0.1) t60DecayRatio : T60 decay ratio (recommended value: 1) t60DecaySlope : T60 decay slope (recommended value: 5)","title":"Usage"},{"location":"libs/physmodels/#pmgermanbell","text":"German church bell modal model. Modeled after D. Bartocha and . Baron, Influence of Tin Bronze Melting and Pouring Parameters on Its Properties and Bell' Tone, Archives of Foundry Engineering, 2016. Model height is 1 m. This model contains 7 excitation positions going linearly from the bottom to the top of the bell. Obviously, a model with more excitation position could be regenerated using mesh2faust . This function also implement a virtual exciter to drive the model.","title":"(pm.)germanBell"},{"location":"libs/physmodels/#usage_111","text":"excitation : germanBell(strikePosition,strikeCutoff,strikeSharpness,gain,trigger) : _ Where: excitation : the excitation signal strikePosition : strike position (0-6) strikeCutoff : cuttoff frequency of the strike genarator (recommended: ~7000Hz) strikeSharpness : shaarpness of the strike (recommened: ~0.25) gain : gain of the strike (0-1) trigger signal (0: off, 1: on)","title":"Usage"},{"location":"libs/physmodels/#pmgermanbell_ui","text":"German church bell physical model based on germanBell with built-in UI.","title":"(pm.)germanBell_ui"},{"location":"libs/physmodels/#usage_112","text":"germanBell_ui : _","title":"Usage"},{"location":"libs/physmodels/#pmrussianbellmodel","text":"Russian church bell modal model generated by mesh2faust from libraries/modalmodels/russianBell . Modeled after D. Bartocha and . Baron, Influence of Tin Bronze Melting and Pouring Parameters on Its Properties and Bell' Tone, Archives of Foundry Engineering, 2016. Model height is 2 m. This model contains 7 excitation positions going linearly from the bottom to the top of the bell. Obviously, a model with more excitation position could be regenerated using mesh2faust .","title":"(pm.)russianBellModel"},{"location":"libs/physmodels/#usage_113","text":"excitation : russianBellModel(nModes,exPos,t60,t60DecayRatio,t60DecaySlope) Where: excitation : the excitation signal nModes : number of synthesized modes (max: 50) exPos : excitation position (0-6) t60 : T60 in seconds (recommended value: 0.1) t60DecayRatio : T60 decay ratio (recommended value: 1) t60DecaySlope : T60 decay slope (recommended value: 5)","title":"Usage"},{"location":"libs/physmodels/#pmrussianbell","text":"Russian church bell modal model. Modeled after D. Bartocha and . Baron, Influence of Tin Bronze Melting and Pouring Parameters on Its Properties and Bell' Tone, Archives of Foundry Engineering, 2016. Model height is 2 m. This model contains 7 excitation positions going linearly from the bottom to the top of the bell. Obviously, a model with more excitation position could be regenerated using mesh2faust . This function also implement a virtual exciter to drive the model.","title":"(pm.)russianBell"},{"location":"libs/physmodels/#usage_114","text":"excitation : russianBell(strikePosition,strikeCutoff,strikeSharpness,gain,trigger) : _ Where: excitation : the excitation signal strikePosition : strike position (0-6) strikeCutoff : cuttoff frequency of the strike genarator (recommended: ~7000Hz) strikeSharpness : shaarpness of the strike (recommened: ~0.25) gain : gain of the strike (0-1) trigger signal (0: off, 1: on)","title":"Usage"},{"location":"libs/physmodels/#pmrussianbell_ui","text":"Russian church bell physical model based on russianBell with built-in UI.","title":"(pm.)russianBell_ui"},{"location":"libs/physmodels/#usage_115","text":"russianBell_ui : _","title":"Usage"},{"location":"libs/physmodels/#pmstandardbellmodel","text":"Standard church bell modal model generated by mesh2faust from libraries/modalmodels/standardBell . Modeled after T. Rossing and R. Perrin, Vibrations of Bells, Applied Acoustics 2, 1987. Model height is 1.8 m. This model contains 7 excitation positions going linearly from the bottom to the top of the bell. Obviously, a model with more excitation position could be regenerated using mesh2faust .","title":"(pm.)standardBellModel"},{"location":"libs/physmodels/#usage_116","text":"excitation : standardBellModel(nModes,exPos,t60,t60DecayRatio,t60DecaySlope) Where: excitation : the excitation signal nModes : number of synthesized modes (max: 50) exPos : excitation position (0-6) t60 : T60 in seconds (recommended value: 0.1) t60DecayRatio : T60 decay ratio (recommended value: 1) t60DecaySlope : T60 decay slope (recommended value: 5)","title":"Usage"},{"location":"libs/physmodels/#pmstandardbell","text":"Standard church bell modal model. Modeled after T. Rossing and R. Perrin, Vibrations of Bells, Applied Acoustics 2, 1987. Model height is 1.8 m. This model contains 7 excitation positions going linearly from the bottom to the top of the bell. Obviously, a model with more excitation position could be regenerated using mesh2faust . This function also implement a virtual exciter to drive the model.","title":"(pm.)standardBell"},{"location":"libs/physmodels/#usage_117","text":"excitation : standardBell(strikePosition,strikeCutoff,strikeSharpness,gain,trigger) : _ Where: excitation : the excitation signal strikePosition : strike position (0-6) strikeCutoff : cuttoff frequency of the strike genarator (recommended: ~7000Hz) strikeSharpness : shaarpness of the strike (recommened: ~0.25) gain : gain of the strike (0-1) trigger signal (0: off, 1: on)","title":"Usage"},{"location":"libs/physmodels/#pmstandardbell_ui","text":"Standard church bell physical model based on standardBell with built-in UI.","title":"(pm.)standardBell_ui"},{"location":"libs/physmodels/#usage_118","text":"standardBell_ui : _","title":"Usage"},{"location":"libs/physmodels/#vocal-synthesis","text":"Vocal synthesizer functions (source/filter, fof, etc.).","title":"Vocal Synthesis"},{"location":"libs/physmodels/#pmformantvalues","text":"Formant data values. The formant data used here come from the CSOUND manual * http://www.csounds.com/manual/html/ .","title":"(pm.)formantValues"},{"location":"libs/physmodels/#usage_119","text":"ba.take(j+1,formantValues.f(i)) : _ ba.take(j+1,formantValues.g(i)) : _ ba.take(j+1,formantValues.bw(i)) : _ Where: i : formant number j : (voiceType*nFormants)+vowel voiceType : the voice type (0: alto, 1: bass, 2: countertenor, 3: soprano, 4: tenor) vowel : the vowel (0: a, 1: e, 2: i, 3: o, 4: u)","title":"Usage"},{"location":"libs/physmodels/#pmvoicegender","text":"Calculate the gender for the provided voiceType value. (0: male, 1: female)","title":"(pm.)voiceGender"},{"location":"libs/physmodels/#usage_120","text":"voiceGender(voiceType) : _ Where: voiceType : the voice type (0: alto, 1: bass, 2: countertenor, 3: soprano, 4: tenor)","title":"Usage"},{"location":"libs/physmodels/#pmskirtwidthmultiplier","text":"Calculates value to multiply bandwidth to obtain skirtwidth for a Fof filter.","title":"(pm.)skirtWidthMultiplier"},{"location":"libs/physmodels/#usage_121","text":"skirtWidthMultiplier(vowel,freq,gender) : _ Where: vowel : the vowel (0: a, 1: e, 2: i, 3: o, 4: u) freq : the fundamental frequency of the excitation signal gender : gender of the voice used in the fof filter (0: male, 1: female)","title":"Usage"},{"location":"libs/physmodels/#pmautobendfreq","text":"Autobends the center frequencies of formants 1 and 2 based on the fundamental frequency of the excitation signal and leaves all other formant frequencies unchanged. Ported from chant-lib . * Reference: https://ccrma.stanford.edu/~rmichon/chantLib/ .","title":"(pm.)autobendFreq"},{"location":"libs/physmodels/#usage_122","text":"_ : autobendFreq(n,freq,voiceType) : _ Where: n : formant index freq : the fundamental frequency of the excitation signal voiceType : the voice type (0: alto, 1: bass, 2: countertenor, input is the center frequency of the corresponding formant","title":"Usage"},{"location":"libs/physmodels/#pmvocaleffort","text":"Changes the gains of the formants based on the fundamental frequency of the excitation signal. Higher formants are reinforced for higher fundamental frequencies. Ported from chant-lib . * Reference: https://ccrma.stanford.edu/~rmichon/chantLib/ .","title":"(pm.)vocalEffort"},{"location":"libs/physmodels/#usage_123","text":"_ : vocalEffort(freq,gender) : _ Where: freq : the fundamental frequency of the excitation signal gender : the gender of the voice type (0: male, 1: female) input is the linear amplitude of the formant","title":"Usage"},{"location":"libs/physmodels/#pmfof","text":"Function to generate a single Formant-Wave-Function. * Reference: https://ccrma.stanford.edu/~mjolsen/pdfs/smc2016_MOlsenFOF.pdf .","title":"(pm.)fof"},{"location":"libs/physmodels/#usage_124","text":"_ : fof(fc,bw,a,g) : _ Where: fc : formant center frequency, bw : formant bandwidth (Hz), sw : formant skirtwidth (Hz) g : linear scale factor (g=1 gives 0dB amplitude response at fc) input is an impulse signal to excite filter","title":"Usage"},{"location":"libs/physmodels/#pmfofsh","text":"FOF with sample and hold used on bw and a parameter used in the filter-cycling FOF function fofCycle . * Reference: https://ccrma.stanford.edu/~mjolsen/pdfs/smc2016_MOlsenFOF.pdf .","title":"(pm.)fofSH"},{"location":"libs/physmodels/#usage_125","text":"_ : fofSH(fc,bw,a,g) : _ Where: all parameters same as for fof","title":"Usage"},{"location":"libs/physmodels/#pmfofcycle","text":"FOF implementation where time-varying filter parameter noise is mitigated by using a cycle of n sample and hold FOF filters. * Reference: https://ccrma.stanford.edu/~mjolsen/pdfs/smc2016_MOlsenFOF.pdf .","title":"(pm.)fofCycle"},{"location":"libs/physmodels/#usage_126","text":"_ : fofCycle(fc,bw,a,g,n) : _ Where: n : the number of FOF filters to cycle through all other parameters are same as for fof","title":"Usage"},{"location":"libs/physmodels/#pmfofsmooth","text":"FOF implementation where time-varying filter parameter noise is mitigated by lowpass filtering the filter parameters bw and a with smooth .","title":"(pm.)fofSmooth"},{"location":"libs/physmodels/#usage_127","text":"_ : fofSmooth(fc,bw,sw,g,tau) : _ Where: tau : the desired smoothing time constant in seconds all other parameters are same as for fof","title":"Usage"},{"location":"libs/physmodels/#pmformantfilterfofcycle","text":"Formant filter based on a single FOF filter. Formant parameters are linearly interpolated allowing to go smoothly from one vowel to another. A cycle of n fof filters with sample-and-hold is used so that the fof filter parameters can be varied in realtime. This technique is more robust but more computationally expensive than formantFilterFofSmooth .Voice type can be selected but must correspond to the frequency range of the provided source to be realistic.","title":"(pm.)formantFilterFofCycle"},{"location":"libs/physmodels/#usage_128","text":"_ : formantFilterFofCycle(voiceType,vowel,nFormants,i,freq) : _ Where: voiceType : the voice type (0: alto, 1: bass, 2: countertenor, 3: soprano, 4: tenor) vowel : the vowel (0: a, 1: e, 2: i, 3: o, 4: u) nFormants : number of formant regions in frequency domain, typically 5 i : formant number (i.e. 0 - 4) used to index formant data value arrays freq : fundamental frequency of excitation signal. Used to calculate rise time of envelope","title":"Usage"},{"location":"libs/physmodels/#pmformantfilterfofsmooth","text":"Formant filter based on a single FOF filter. Formant parameters are linearly interpolated allowing to go smoothly from one vowel to another. Fof filter parameters are lowpass filtered to mitigate possible noise from varying them in realtime. Voice type can be selected but must correspond to the frequency range of the provided source to be realistic.","title":"(pm.)formantFilterFofSmooth"},{"location":"libs/physmodels/#usage_129","text":"_ : formantFilterFofSmooth(voiceType,vowel,nFormants,i,freq) : _ Where: voiceType : the voice type (0: alto, 1: bass, 2: countertenor, 3: soprano, 4: tenor) vowel : the vowel (0: a, 1: e, 2: i, 3: o, 4: u) nFormants : number of formant regions in frequency domain, typically 5 i : formant number (i.e. 1 - 5) used to index formant data value arrays freq : fundamental frequency of excitation signal. Used to calculate rise time of envelope","title":"Usage"},{"location":"libs/physmodels/#pmformantfilterbp","text":"Formant filter based on a single resonant bandpass filter. Formant parameters are linearly interpolated allowing to go smoothly from one vowel to another. Voice type can be selected but must correspond to the frequency range of the provided source to be realistic.","title":"(pm.)formantFilterBP"},{"location":"libs/physmodels/#usage_130","text":"_ : formantFilterBP(voiceType,vowel,nFormants,i,freq) : _ Where: voiceType : the voice type (0: alto, 1: bass, 2: countertenor, 3: soprano, 4: tenor) vowel : the vowel (0: a, 1: e, 2: i, 3: o, 4: u) nFormants : number of formant regions in frequency domain, typically 5 i : formant index used to index formant data value arrays freq : fundamental frequency of excitation signal.","title":"Usage"},{"location":"libs/physmodels/#pmformantfilterbank","text":"Formant filterbank which can use different types of filterbank functions and different excitation signals. Formant parameters are linearly interpolated allowing to go smoothly from one vowel to another. Voice type can be selected but must correspond to the frequency range of the provided source to be realistic.","title":"(pm.)formantFilterbank"},{"location":"libs/physmodels/#usage_131","text":"_ : formantFilterbank(voiceType,vowel,formantGen,freq) : _ Where: voiceType : the voice type (0: alto, 1: bass, 2: countertenor, 3: soprano, 4: tenor) vowel : the vowel (0: a, 1: e, 2: i, 3: o, 4: u) formantGen : the specific formant filterbank function (i.e. FormantFilterbankBP, FormantFilterbankFof,...) freq : fundamental frequency of excitation signal. Needed for FOF version to calculate rise time of envelope","title":"Usage"},{"location":"libs/physmodels/#pmformantfilterbankfofcycle","text":"Formant filterbank based on a bank of fof filters. Formant parameters are linearly interpolated allowing to go smoothly from one vowel to another. Voice type can be selected but must correspond to the frequency range of the provided source to be realistic.","title":"(pm.)formantFilterbankFofCycle"},{"location":"libs/physmodels/#usage_132","text":"_ : formantFilterbankFofCycle(voiceType,vowel,freq) : _ Where: voiceType : the voice type (0: alto, 1: bass, 2: countertenor, 3: soprano, 4: tenor) vowel : the vowel (0: a, 1: e, 2: i, 3: o, 4: u) freq : the fundamental frequency of the excitation signal. Needed to","title":"Usage"},{"location":"libs/physmodels/#pmformantfilterbankfofsmooth","text":"Formant filterbank based on a bank of fof filters. Formant parameters are linearly interpolated allowing to go smoothly from one vowel to another. Voice type can be selected but must correspond to the frequency range of the provided source to be realistic.","title":"(pm.)formantFilterbankFofSmooth"},{"location":"libs/physmodels/#usage_133","text":"_ : formantFilterbankFofSmooth(voiceType,vowel,freq) : _ Where: voiceType : the voice type (0: alto, 1: bass, 2: countertenor, 3: soprano, 4: tenor) vowel : the vowel (0: a, 1: e, 2: i, 3: o, 4: u) freq : the fundamental frequency of the excitation signal. Needed to","title":"Usage"},{"location":"libs/physmodels/#pmformantfilterbankbp","text":"Formant filterbank based on a bank of resonant bandpass filters. Formant parameters are linearly interpolated allowing to go smoothly from one vowel to another. Voice type can be selected but must correspond to the frequency range of the provided source to be realistic.","title":"(pm.)formantFilterbankBP"},{"location":"libs/physmodels/#usage_134","text":"_ : formantFilterbankBP(voiceType,vowel) : _ Where: voiceType : the voice type (0: alto, 1: bass, 2: countertenor, 3: soprano, 4: tenor) vowel : the vowel (0: a, 1: e, 2: i, 3: o, 4: u) freq : the fundamental frequency of the excitation signal. Needed","title":"Usage"},{"location":"libs/physmodels/#pmsfformantmodel","text":"Simple formant/vocal synthesizer based on a source/filter model. The source and filterbank must be specified by the user. filterbank must take the same input parameters as formantFilterbank ( BP / FofCycle / FofSmooth ). Formant parameters are linearly interpolated allowing to go smoothly from one vowel to another. Voice type can be selected but must correspond to the frequency range of the synthesized voice to be realistic.","title":"(pm.)SFFormantModel"},{"location":"libs/physmodels/#usage_135","text":"SFFormantModel(voiceType,vowel,exType,freq,gain,source,filterbank,isFof) : _ Where: voiceType : the voice type (0: alto, 1: bass, 2: countertenor, 3: soprano, 4: tenor) vowel : the vowel (0: a, 1: e, 2: i, 3: o, 4: u exType : voice vs. fricative sound ratio (0-1 where 1 is 100% fricative) freq : the fundamental frequency of the source signal gain : linear gain multiplier to multiply the source by isFof : whether model is FOF based (0: no, 1: yes)","title":"Usage"},{"location":"libs/physmodels/#pmsfformantmodelfofcycle","text":"Simple formant/vocal synthesizer based on a source/filter model. The source is just a periodic impulse and the \"filter\" is a bank of FOF filters. Formant parameters are linearly interpolated allowing to go smoothly from one vowel to another. Voice type can be selected but must correspond to the frequency range of the synthesized voice to be realistic. This model does not work with noise in the source signal so exType has been removed and model does not depend on SFFormantModel function.","title":"(pm.)SFFormantModelFofCycle"},{"location":"libs/physmodels/#usage_136","text":"SFFormantModelFofCycle(voiceType,vowel,freq,gain) : _ Where: voiceType : the voice type (0: alto, 1: bass, 2: countertenor, 3: soprano, 4: tenor) vowel : the vowel (0: a, 1: e, 2: i, 3: o, 4: u freq : the fundamental frequency of the source signal gain : linear gain multiplier to multiply the source by","title":"Usage"},{"location":"libs/physmodels/#pmsfformantmodelfofsmooth","text":"Simple formant/vocal synthesizer based on a source/filter model. The source is just a periodic impulse and the \"filter\" is a bank of FOF filters. Formant parameters are linearly interpolated allowing to go smoothly from one vowel to another. Voice type can be selected but must correspond to the frequency range of the synthesized voice to be realistic.","title":"(pm.)SFFormantModelFofSmooth"},{"location":"libs/physmodels/#usage_137","text":"SFFormantModelFofSmooth(voiceType,vowel,freq,gain) : _ Where: voiceType : the voice type (0: alto, 1: bass, 2: countertenor, 3: soprano, 4: tenor) vowel : the vowel (0: a, 1: e, 2: i, 3: o, 4: u freq : the fundamental frequency of the source signal gain : linear gain multiplier to multiply the source by","title":"Usage"},{"location":"libs/physmodels/#pmsfformantmodelbp","text":"Simple formant/vocal synthesizer based on a source/filter model. The source is just a sawtooth wave and the \"filter\" is a bank of resonant bandpass filters. Formant parameters are linearly interpolated allowing to go smoothly from one vowel to another. Voice type can be selected but must correspond to the frequency range of the synthesized voice to be realistic. The formant data used here come from the CSOUND manual * http://www.csounds.com/manual/html/ .","title":"(pm.)SFFormantModelBP"},{"location":"libs/physmodels/#usage_138","text":"SFFormantModelBP(voiceType,vowel,exType,freq,gain) : _ Where: voiceType : the voice type (0: alto, 1: bass, 2: countertenor, 3: soprano, 4: tenor) vowel : the vowel (0: a, 1: e, 2: i, 3: o, 4: u exType : voice vs. fricative sound ratio (0-1 where 1 is 100% fricative) freq : the fundamental frequency of the source signal gain : linear gain multiplier to multiply the source by","title":"Usage"},{"location":"libs/physmodels/#pmsfformantmodelfofcycle_ui","text":"Ready-to-use source-filter vocal synthesizer with built-in user interface.","title":"(pm.)SFFormantModelFofCycle_ui"},{"location":"libs/physmodels/#usage_139","text":"SFFormantModelFofCycle_ui : _","title":"Usage"},{"location":"libs/physmodels/#pmsfformantmodelfofsmooth_ui","text":"Ready-to-use source-filter vocal synthesizer with built-in user interface.","title":"(pm.)SFFormantModelFofSmooth_ui"},{"location":"libs/physmodels/#usage_140","text":"SFFormantModelFofSmooth_ui : _","title":"Usage"},{"location":"libs/physmodels/#pmsfformantmodelbp_ui","text":"Ready-to-use source-filter vocal synthesizer with built-in user interface.","title":"(pm.)SFFormantModelBP_ui"},{"location":"libs/physmodels/#usage_141","text":"SFFormantModelBP_ui : _","title":"Usage"},{"location":"libs/physmodels/#pmsfformantmodelfofcycle_ui_midi","text":"Ready-to-use MIDI-controllable source-filter vocal synthesizer.","title":"(pm.)SFFormantModelFofCycle_ui_MIDI"},{"location":"libs/physmodels/#usage_142","text":"SFFormantModelFofCycle_ui_MIDI : _","title":"Usage"},{"location":"libs/physmodels/#pmsfformantmodelfofsmooth_ui_midi","text":"Ready-to-use MIDI-controllable source-filter vocal synthesizer.","title":"(pm.)SFFormantModelFofSmooth_ui_MIDI"},{"location":"libs/physmodels/#usage_143","text":"SFFormantModelFofSmooth_ui_MIDI : _","title":"Usage"},{"location":"libs/physmodels/#pmsfformantmodelbp_ui_midi","text":"Ready-to-use MIDI-controllable source-filter vocal synthesizer.","title":"(pm.)SFFormantModelBP_ui_MIDI"},{"location":"libs/physmodels/#usage_144","text":"SFFormantModelBP_ui_MIDI : _","title":"Usage"},{"location":"libs/physmodels/#misc-functions","text":"Various miscellaneous functions.","title":"Misc Functions"},{"location":"libs/physmodels/#pmallpassnl","text":"Bidirectional block adding nonlinearities in both directions in a chain. Nonlinearities are created by modulating the coefficients of a passive allpass filter by the signal it is processing.","title":"(pm.)allpassNL"},{"location":"libs/physmodels/#usage_145","text":"chain(... : allpassNL(nonlinearity) : ...) Where: nonlinearity : amount of nonlinearity to be added (0-1)","title":"Usage"},{"location":"libs/physmodels/#modalmodel","text":"Implement multiple resonance modes using resonant bandpass filters.","title":"modalModel"},{"location":"libs/physmodels/#usage_146","text":"_ : modalModel(n, freqs, t60s, gains) : _ Where: n : number of given modes freqs : list of filter center freqencies t60s : list of mode resonance durations (in seconds) gains : list of mode gains (0-1) For example, to generate a model with 2 modes (440 Hz and 660 Hz, a fifth) where the higher one decays faster and is attenuated: os.impulse : modalModel(2, (440, 660), (0.5, 0.25), (ba.db2linear(-1), ba.db2linear(-6)) : _ Further reading: Grumiaux et. al., 2017: Impulse-Response and CAD-Model-Based Physical Modeling in Faust","title":"Usage"},{"location":"libs/quantizer/","text":"quantizer.lib Faust Frequency Quantization Library. Its official prefix is qu . Functions Reference (qu.)quantize Configurable frequency quantization tool. Outputs only the frenquencies that are part of the specified scale. Doesn't work as intended for frequencies between -1 and 1. Usage _ : quantize(rf,nl) : _ Where : rf : frequency of the root note of the scale. nl : list of the ratio of the frequencies of each note in relation to the root frequency. (qu.)quantizeSmoothed Configurable frequency quantization tool. Outputs frenquencies that are closer to the frequencies of the notes of the specified scale. Doesn't work as intended for frequencies between -1 and 1. Usage _ : quantizeSmoothed(rf,nl) : _ nl = (1,1.2,1.4,1.7); Where : rf : frequency of the root note of the scale. nl : list of the ratio of the frequencies of each note in relation to the root frequency. (qu.)ionian List of the frequency ratios of the notes of the ionian mode. Usage _ : quantize(rf,ionian) : _ Where: rf : frequency of the root note of the scale. (qu.)pentanat List of the frequency ratios of the notes of the pythagorean tuning for the minor pentatonic scale. Usage _ : quantize(rf,pentanat) : _ Where: rf : frequency of the root note of the scale. (qu.)kumoi List of the frequency ratios of the notes of the kumoijoshi, the japanese pentatonic scale. Usage _ : quantize(rf,kumoi) : _ Where: rf : frequency of the root note of the scale. (qu.)natural List of the frequency ratios of the notes of the natural major scale. Usage _ : quantize(rf,natural) : _ Where: rf : frequency of the root note of the scale. (qu.)dodeca List of the frequency ratios of the notes of the dodecaphonic scale. Usage _ : quantize(rf,dodeca) : _ Where: rf : frequency of the root note of the scale. (qu.)dimin List of the frequency ratios of the notes of the diminished scale. Usage _ : quantize(rf,dimin) : _ Where: rf : frequency of the root note of the scale. (qu.)penta List of the frequency ratios of the notes of the minor pentatonic scale. Usage _ : quantize(rf,penta) : _ Where: rf : frequency of the root note of the scale. (qu.)dorian List of the frequency ratios of the notes of the dorian mode. Usage _ : quantize(rf,dorian) : _ Where: rf : frequency of the root note of the scale.","title":" quantizer "},{"location":"libs/quantizer/#quantizerlib","text":"Faust Frequency Quantization Library. Its official prefix is qu .","title":"quantizer.lib"},{"location":"libs/quantizer/#functions-reference","text":"","title":"Functions Reference"},{"location":"libs/quantizer/#ququantize","text":"Configurable frequency quantization tool. Outputs only the frenquencies that are part of the specified scale. Doesn't work as intended for frequencies between -1 and 1.","title":"(qu.)quantize"},{"location":"libs/quantizer/#usage","text":"_ : quantize(rf,nl) : _ Where : rf : frequency of the root note of the scale. nl : list of the ratio of the frequencies of each note in relation to the root frequency.","title":"Usage"},{"location":"libs/quantizer/#ququantizesmoothed","text":"Configurable frequency quantization tool. Outputs frenquencies that are closer to the frequencies of the notes of the specified scale. Doesn't work as intended for frequencies between -1 and 1.","title":"(qu.)quantizeSmoothed"},{"location":"libs/quantizer/#usage_1","text":"_ : quantizeSmoothed(rf,nl) : _ nl = (1,1.2,1.4,1.7); Where : rf : frequency of the root note of the scale. nl : list of the ratio of the frequencies of each note in relation to the root frequency.","title":"Usage"},{"location":"libs/quantizer/#quionian","text":"List of the frequency ratios of the notes of the ionian mode.","title":"(qu.)ionian"},{"location":"libs/quantizer/#usage_2","text":"_ : quantize(rf,ionian) : _ Where: rf : frequency of the root note of the scale.","title":"Usage"},{"location":"libs/quantizer/#qupentanat","text":"List of the frequency ratios of the notes of the pythagorean tuning for the minor pentatonic scale.","title":"(qu.)pentanat"},{"location":"libs/quantizer/#usage_3","text":"_ : quantize(rf,pentanat) : _ Where: rf : frequency of the root note of the scale.","title":"Usage"},{"location":"libs/quantizer/#qukumoi","text":"List of the frequency ratios of the notes of the kumoijoshi, the japanese pentatonic scale.","title":"(qu.)kumoi"},{"location":"libs/quantizer/#usage_4","text":"_ : quantize(rf,kumoi) : _ Where: rf : frequency of the root note of the scale.","title":"Usage"},{"location":"libs/quantizer/#qunatural","text":"List of the frequency ratios of the notes of the natural major scale.","title":"(qu.)natural"},{"location":"libs/quantizer/#usage_5","text":"_ : quantize(rf,natural) : _ Where: rf : frequency of the root note of the scale.","title":"Usage"},{"location":"libs/quantizer/#qudodeca","text":"List of the frequency ratios of the notes of the dodecaphonic scale.","title":"(qu.)dodeca"},{"location":"libs/quantizer/#usage_6","text":"_ : quantize(rf,dodeca) : _ Where: rf : frequency of the root note of the scale.","title":"Usage"},{"location":"libs/quantizer/#qudimin","text":"List of the frequency ratios of the notes of the diminished scale.","title":"(qu.)dimin"},{"location":"libs/quantizer/#usage_7","text":"_ : quantize(rf,dimin) : _ Where: rf : frequency of the root note of the scale.","title":"Usage"},{"location":"libs/quantizer/#qupenta","text":"List of the frequency ratios of the notes of the minor pentatonic scale.","title":"(qu.)penta"},{"location":"libs/quantizer/#usage_8","text":"_ : quantize(rf,penta) : _ Where: rf : frequency of the root note of the scale.","title":"Usage"},{"location":"libs/quantizer/#qudorian","text":"List of the frequency ratios of the notes of the dorian mode.","title":"(qu.)dorian"},{"location":"libs/quantizer/#usage_9","text":"_ : quantize(rf,dorian) : _ Where: rf : frequency of the root note of the scale.","title":"Usage"},{"location":"libs/quantizers/","text":"quantizers.lib Faust Frequency Quantization Library. Its official prefix is qu . Functions Reference (qu.)quantize Configurable frequency quantization tool. Outputs only the frenquencies that are part of the specified scale. Works for positive audio frequencies. Usage _ : quantize(rf,nl) : _ Where : * rf : frequency of the root note of the scale. * nl : list of the ratio of the frequencies of each note in relation to the root frequency. (qu.)quantizeSmoothed Configurable frequency quantization tool. Outputs frenquencies that are closer to the frequencies of the notes of the specified scale. Works for positive audio frequencies. Usage _ : quantizeSmoothed(rf,nl) : _ nl = (1,1.2,1.4,1.7); Where : * rf : frequency of the root note of the scale. * nl : list of the ratio of the frequencies of each note in relation to the root frequency. (qu.)ionian List of the frequency ratios of the notes of the ionian mode. Usage _ : quantize(rf,ionian) : _ Where: * rf : frequency of the root note of the scale. (qu.)dorian List of the frequency ratios of the notes of the dorian mode. Usage _ : quantize(rf,dorian) : _ Where: * rf : frequency of the root note of the scale. (qu.)phrygian List of the frequency ratios of the notes of the phrygian mode. Usage _ : quantize(rf,phrygian) : _ Where: * rf : frequency of the root note of the scale. (qu.)lydian List of the frequency ratios of the notes of the lydian mode. Usage _ : quantize(rf,lydian) : _ Where: * rf : frequency of the root note of the scale. (qu.)mixo List of the frequency ratios of the notes of the mixolydian mode. Usage _ : quantize(rf,mixo) : _ Where: * rf : frequency of the root note of the scale. (qu.)eolian List of the frequency ratios of the notes of the eolian mode. Usage _ : quantize(rf,eolian) : _ Where: * rf : frequency of the root note of the scale. (qu.)locrian List of the frequency ratios of the notes of the locrian mode. Usage _ : quantize(rf,locrian) : _ Where: * rf : frequency of the root note of the scale. (qu.)pentanat List of the frequency ratios of the notes of the pythagorean tuning for the minor pentatonic scale. Usage _ : quantize(rf,pentanat) : _ Where: * rf : frequency of the root note of the scale. (qu.)kumoi List of the frequency ratios of the notes of the kumoijoshi, the japanese pentatonic scale. Usage _ : quantize(rf,kumoi) : _ Where: * rf : frequency of the root note of the scale. (qu.)natural List of the frequency ratios of the notes of the natural major scale. Usage _ : quantize(rf,natural) : _ Where: * rf : frequency of the root note of the scale. (qu.)dodeca List of the frequency ratios of the notes of the dodecaphonic scale. Usage _ : quantize(rf,dodeca) : _ Where: * rf : frequency of the root note of the scale. (qu.)dimin List of the frequency ratios of the notes of the diminished scale. Usage _ : quantize(rf,dimin) : _ Where: * rf : frequency of the root note of the scale. (qu.)penta List of the frequency ratios of the notes of the minor pentatonic scale. Usage _ : quantize(rf,penta) : _ Where: * rf : frequency of the root note of the scale.","title":"quantizers.lib"},{"location":"libs/quantizers/#quantizerslib","text":"Faust Frequency Quantization Library. Its official prefix is qu .","title":"quantizers.lib"},{"location":"libs/quantizers/#_1","text":"","title":""},{"location":"libs/quantizers/#functions-reference","text":"","title":"Functions Reference"},{"location":"libs/quantizers/#_2","text":"","title":""},{"location":"libs/quantizers/#ququantize","text":"Configurable frequency quantization tool. Outputs only the frenquencies that are part of the specified scale. Works for positive audio frequencies.","title":"(qu.)quantize"},{"location":"libs/quantizers/#usage","text":"_ : quantize(rf,nl) : _ Where : * rf : frequency of the root note of the scale. * nl : list of the ratio of the frequencies of each note in relation to the root frequency.","title":"Usage"},{"location":"libs/quantizers/#_3","text":"","title":""},{"location":"libs/quantizers/#ququantizesmoothed","text":"Configurable frequency quantization tool. Outputs frenquencies that are closer to the frequencies of the notes of the specified scale. Works for positive audio frequencies.","title":"(qu.)quantizeSmoothed"},{"location":"libs/quantizers/#usage_1","text":"_ : quantizeSmoothed(rf,nl) : _ nl = (1,1.2,1.4,1.7); Where : * rf : frequency of the root note of the scale. * nl : list of the ratio of the frequencies of each note in relation to the root frequency.","title":"Usage"},{"location":"libs/quantizers/#_4","text":"","title":""},{"location":"libs/quantizers/#quionian","text":"List of the frequency ratios of the notes of the ionian mode.","title":"(qu.)ionian"},{"location":"libs/quantizers/#usage_2","text":"_ : quantize(rf,ionian) : _ Where: * rf : frequency of the root note of the scale.","title":"Usage"},{"location":"libs/quantizers/#_5","text":"","title":""},{"location":"libs/quantizers/#qudorian","text":"List of the frequency ratios of the notes of the dorian mode.","title":"(qu.)dorian"},{"location":"libs/quantizers/#usage_3","text":"_ : quantize(rf,dorian) : _ Where: * rf : frequency of the root note of the scale.","title":"Usage"},{"location":"libs/quantizers/#_6","text":"","title":""},{"location":"libs/quantizers/#quphrygian","text":"List of the frequency ratios of the notes of the phrygian mode.","title":"(qu.)phrygian"},{"location":"libs/quantizers/#usage_4","text":"_ : quantize(rf,phrygian) : _ Where: * rf : frequency of the root note of the scale.","title":"Usage"},{"location":"libs/quantizers/#_7","text":"","title":""},{"location":"libs/quantizers/#qulydian","text":"List of the frequency ratios of the notes of the lydian mode.","title":"(qu.)lydian"},{"location":"libs/quantizers/#usage_5","text":"_ : quantize(rf,lydian) : _ Where: * rf : frequency of the root note of the scale.","title":"Usage"},{"location":"libs/quantizers/#_8","text":"","title":""},{"location":"libs/quantizers/#qumixo","text":"List of the frequency ratios of the notes of the mixolydian mode.","title":"(qu.)mixo"},{"location":"libs/quantizers/#usage_6","text":"_ : quantize(rf,mixo) : _ Where: * rf : frequency of the root note of the scale.","title":"Usage"},{"location":"libs/quantizers/#_9","text":"","title":""},{"location":"libs/quantizers/#queolian","text":"List of the frequency ratios of the notes of the eolian mode.","title":"(qu.)eolian"},{"location":"libs/quantizers/#usage_7","text":"_ : quantize(rf,eolian) : _ Where: * rf : frequency of the root note of the scale.","title":"Usage"},{"location":"libs/quantizers/#_10","text":"","title":""},{"location":"libs/quantizers/#qulocrian","text":"List of the frequency ratios of the notes of the locrian mode.","title":"(qu.)locrian"},{"location":"libs/quantizers/#usage_8","text":"_ : quantize(rf,locrian) : _ Where: * rf : frequency of the root note of the scale.","title":"Usage"},{"location":"libs/quantizers/#_11","text":"","title":""},{"location":"libs/quantizers/#qupentanat","text":"List of the frequency ratios of the notes of the pythagorean tuning for the minor pentatonic scale.","title":"(qu.)pentanat"},{"location":"libs/quantizers/#usage_9","text":"_ : quantize(rf,pentanat) : _ Where: * rf : frequency of the root note of the scale.","title":"Usage"},{"location":"libs/quantizers/#_12","text":"","title":""},{"location":"libs/quantizers/#qukumoi","text":"List of the frequency ratios of the notes of the kumoijoshi, the japanese pentatonic scale.","title":"(qu.)kumoi"},{"location":"libs/quantizers/#usage_10","text":"_ : quantize(rf,kumoi) : _ Where: * rf : frequency of the root note of the scale.","title":"Usage"},{"location":"libs/quantizers/#_13","text":"","title":""},{"location":"libs/quantizers/#qunatural","text":"List of the frequency ratios of the notes of the natural major scale.","title":"(qu.)natural"},{"location":"libs/quantizers/#usage_11","text":"_ : quantize(rf,natural) : _ Where: * rf : frequency of the root note of the scale.","title":"Usage"},{"location":"libs/quantizers/#_14","text":"","title":""},{"location":"libs/quantizers/#qudodeca","text":"List of the frequency ratios of the notes of the dodecaphonic scale.","title":"(qu.)dodeca"},{"location":"libs/quantizers/#usage_12","text":"_ : quantize(rf,dodeca) : _ Where: * rf : frequency of the root note of the scale.","title":"Usage"},{"location":"libs/quantizers/#_15","text":"","title":""},{"location":"libs/quantizers/#qudimin","text":"List of the frequency ratios of the notes of the diminished scale.","title":"(qu.)dimin"},{"location":"libs/quantizers/#usage_13","text":"_ : quantize(rf,dimin) : _ Where: * rf : frequency of the root note of the scale.","title":"Usage"},{"location":"libs/quantizers/#_16","text":"","title":""},{"location":"libs/quantizers/#qupenta","text":"List of the frequency ratios of the notes of the minor pentatonic scale.","title":"(qu.)penta"},{"location":"libs/quantizers/#usage_14","text":"_ : quantize(rf,penta) : _ Where: * rf : frequency of the root note of the scale.","title":"Usage"},{"location":"libs/quantizers/#_17","text":"","title":""},{"location":"libs/reducemaps/","text":"reducemaps.lib A library to handle reduce/map kind of operation in Faust. Its official prefix is rm . (rm.)reduce Fold-like high order function. Apply a binary operation on a block of consecutive samples of a signal . For example : reduce(max,128) will compute the maximun of each block of 128 samples. Please note that the resulting value, while produced continuously, will be constant for the duration of a block. A new value is only produced at the end of a block. Note also that blocks should be of at least one sample (n>0). Usage reduce(op, n, x) (rm.)reducemap Like reduce but a foo function is applied to the result. From a mathematical point of view : reducemap(op,foo,n) is equivalent to reduce(op,n):foo but more efficient. Usage reducemap(op, foo, n, x)","title":" reducemaps "},{"location":"libs/reducemaps/#reducemapslib","text":"A library to handle reduce/map kind of operation in Faust. Its official prefix is rm .","title":"reducemaps.lib"},{"location":"libs/reducemaps/#rmreduce","text":"Fold-like high order function. Apply a binary operation on a block of consecutive samples of a signal . For example : reduce(max,128) will compute the maximun of each block of 128 samples. Please note that the resulting value, while produced continuously, will be constant for the duration of a block. A new value is only produced at the end of a block. Note also that blocks should be of at least one sample (n>0).","title":"(rm.)reduce"},{"location":"libs/reducemaps/#usage","text":"reduce(op, n, x)","title":"Usage"},{"location":"libs/reducemaps/#rmreducemap","text":"Like reduce but a foo function is applied to the result. From a mathematical point of view : reducemap(op,foo,n) is equivalent to reduce(op,n):foo but more efficient.","title":"(rm.)reducemap"},{"location":"libs/reducemaps/#usage_1","text":"reducemap(op, foo, n, x)","title":"Usage"},{"location":"libs/reverbs/","text":"reverbs.lib A library of reverb effects. Its official prefix is re . Schroeder Reverberators (re.)jcrev This artificial reverberator take a mono signal and output stereo ( satrev ) and quad ( jcrev ). They were implemented by John Chowning in the MUS10 computer-music language (descended from Music V by Max Mathews). They are Schroeder Reverberators, well tuned for their size. Nowadays, the more expensive freeverb is more commonly used (see the Faust examples directory). jcrev reverb below was made from a listing of \"RV\", dated April 14, 1972, which was recovered from an old SAIL DART backup tape. John Chowning thinks this might be the one that became the well known and often copied JCREV. jcrev is a standard Faust function Usage _ : jcrev : _,_,_,_ (re.)satrev This artificial reverberator take a mono signal and output stereo ( satrev ) and quad ( jcrev ). They were implemented by John Chowning in the MUS10 computer-music language (descended from Music V by Max Mathews). They are Schroeder Reverberators, well tuned for their size. Nowadays, the more expensive freeverb is more commonly used (see the Faust examples directory). satrev was made from a listing of \"SATREV\", dated May 15, 1971, which was recovered from an old SAIL DART backup tape. John Chowning thinks this might be the one used on his often-heard brass canon sound examples, one of which can be found at * https://ccrma.stanford.edu/~jos/wav/FM-BrassCanon2.wav . Usage _ : satrev : _,_ Feedback Delay Network (FDN) Reverberators (re.)fdnrev0 Pure Feedback Delay Network Reverberator (generalized for easy scaling). fdnrev0 is a standard Faust function. Usage <1,2,4,...,N signals> <: fdnrev0(MAXDELAY,delays,BBSO,freqs,durs,loopgainmax,nonl) :> <1,2,4,...,N signals> Where: N : 2, 4, 8, ... (power of 2) MAXDELAY : power of 2 at least as large as longest delay-line length delays : N delay lines, N a power of 2, lengths perferably coprime BBSO : odd positive integer = order of bandsplit desired at freqs freqs : NB-1 crossover frequencies separating desired frequency bands durs : NB decay times (t60) desired for the various bands loopgainmax : scalar gain between 0 and 1 used to \"squelch\" the reverb nonl : nonlinearity (0 to 0.999..., 0 being linear) Reference https://ccrma.stanford.edu/~jos/pasp/FDN_Reverberation.html (re.)zita_rev_fdn Internal 8x8 late-reverberation FDN used in the FOSS Linux reverb zita-rev1 by Fons Adriaensen fons@linuxaudio.org . This is an FDN reverb with allpass comb filters in each feedback delay in addition to the damping filters. Usage bus(8) : zita_rev_fdn(f1,f2,t60dc,t60m,fsmax) : bus(8) Where: f1 : crossover frequency (Hz) separating dc and midrange frequencies f2 : frequency (Hz) above f1 where T60 = t60m/2 (see below) t60dc : desired decay time (t60) at frequency 0 (sec) t60m : desired decay time (t60) at midrange frequencies (sec) fsmax : maximum sampling rate to be used (Hz) Reference http://www.kokkinizita.net/linuxaudio/zita-rev1-doc/quickguide.html https://ccrma.stanford.edu/~jos/pasp/Zita_Rev1.html (re.)zita_rev1_stereo Extend zita_rev_fdn to include zita_rev1 input/output mapping in stereo mode. zita_rev1_stereo is a standard Faust function. Usage _,_ : zita_rev1_stereo(rdel,f1,f2,t60dc,t60m,fsmax) : _,_ Where: rdel = delay (in ms) before reverberation begins (e.g., 0 to ~100 ms) (remaining args and refs as for zita_rev_fdn above) (re.)zita_rev1_ambi Extend zita_rev_fdn to include zita_rev1 input/output mapping in \"ambisonics mode\", as provided in the Linux C++ version. Usage _,_ : zita_rev1_ambi(rgxyz,rdel,f1,f2,t60dc,t60m,fsmax) : _,_,_,_ Where: rgxyz = relative gain of lanes 1,4,2 to lane 0 in output (e.g., -9 to 9) (remaining args and references as for zita_rev1_stereo above) Freeverb (re.)mono_freeverb A simple Schroeder reverberator primarily developed by \"Jezar at Dreampoint\" that is extensively used in the free-software world. It uses four Schroeder allpasses in series and eight parallel Schroeder-Moorer filtered-feedback comb-filters for each audio channel, and is said to be especially well tuned. mono_freeverb is a standard Faust function. Usage _ : mono_freeverb(fb1, fb2, damp, spread) : _; Where: fb1 : coefficient of the lowpass comb filters (0-1) fb2 : coefficient of the allpass comb filters (0-1) damp : damping of the lowpass comb filter (0-1) spread : spatial spread in number of samples (for stereo) License While this version is licensed LGPL (with exception) along with other GRAME library functions, the file freeverb.dsp in the examples directory of older Faust distributions, such as faust-0.9.85, was released under the BSD license, which is less restrictive. (re.)stereo_freeverb A simple Schroeder reverberator primarily developed by \"Jezar at Dreampoint\" that is extensively used in the free-software world. It uses four Schroeder allpasses in series and eight parallel Schroeder-Moorer filtered-feedback comb-filters for each audio channel, and is said to be especially well tuned. Usage _,_ : stereo_freeverb(fb1, fb2, damp, spread) : _,_; Where: fb1 : coefficient of the lowpass comb filters (0-1) fb2 : coefficient of the allpass comb filters (0-1) damp : damping of the lowpass comb filter (0-1) spread : spatial spread in number of samples (for stereo)","title":" reverbs "},{"location":"libs/reverbs/#reverbslib","text":"A library of reverb effects. Its official prefix is re .","title":"reverbs.lib"},{"location":"libs/reverbs/#schroeder-reverberators","text":"","title":"Schroeder Reverberators"},{"location":"libs/reverbs/#rejcrev","text":"This artificial reverberator take a mono signal and output stereo ( satrev ) and quad ( jcrev ). They were implemented by John Chowning in the MUS10 computer-music language (descended from Music V by Max Mathews). They are Schroeder Reverberators, well tuned for their size. Nowadays, the more expensive freeverb is more commonly used (see the Faust examples directory). jcrev reverb below was made from a listing of \"RV\", dated April 14, 1972, which was recovered from an old SAIL DART backup tape. John Chowning thinks this might be the one that became the well known and often copied JCREV. jcrev is a standard Faust function","title":"(re.)jcrev"},{"location":"libs/reverbs/#usage","text":"_ : jcrev : _,_,_,_","title":"Usage"},{"location":"libs/reverbs/#resatrev","text":"This artificial reverberator take a mono signal and output stereo ( satrev ) and quad ( jcrev ). They were implemented by John Chowning in the MUS10 computer-music language (descended from Music V by Max Mathews). They are Schroeder Reverberators, well tuned for their size. Nowadays, the more expensive freeverb is more commonly used (see the Faust examples directory). satrev was made from a listing of \"SATREV\", dated May 15, 1971, which was recovered from an old SAIL DART backup tape. John Chowning thinks this might be the one used on his often-heard brass canon sound examples, one of which can be found at * https://ccrma.stanford.edu/~jos/wav/FM-BrassCanon2.wav .","title":"(re.)satrev"},{"location":"libs/reverbs/#usage_1","text":"_ : satrev : _,_","title":"Usage"},{"location":"libs/reverbs/#feedback-delay-network-fdn-reverberators","text":"","title":"Feedback Delay Network (FDN) Reverberators"},{"location":"libs/reverbs/#refdnrev0","text":"Pure Feedback Delay Network Reverberator (generalized for easy scaling). fdnrev0 is a standard Faust function.","title":"(re.)fdnrev0"},{"location":"libs/reverbs/#usage_2","text":"<1,2,4,...,N signals> <: fdnrev0(MAXDELAY,delays,BBSO,freqs,durs,loopgainmax,nonl) :> <1,2,4,...,N signals> Where: N : 2, 4, 8, ... (power of 2) MAXDELAY : power of 2 at least as large as longest delay-line length delays : N delay lines, N a power of 2, lengths perferably coprime BBSO : odd positive integer = order of bandsplit desired at freqs freqs : NB-1 crossover frequencies separating desired frequency bands durs : NB decay times (t60) desired for the various bands loopgainmax : scalar gain between 0 and 1 used to \"squelch\" the reverb nonl : nonlinearity (0 to 0.999..., 0 being linear)","title":"Usage"},{"location":"libs/reverbs/#reference","text":"https://ccrma.stanford.edu/~jos/pasp/FDN_Reverberation.html","title":"Reference"},{"location":"libs/reverbs/#rezita_rev_fdn","text":"Internal 8x8 late-reverberation FDN used in the FOSS Linux reverb zita-rev1 by Fons Adriaensen fons@linuxaudio.org . This is an FDN reverb with allpass comb filters in each feedback delay in addition to the damping filters.","title":"(re.)zita_rev_fdn"},{"location":"libs/reverbs/#usage_3","text":"bus(8) : zita_rev_fdn(f1,f2,t60dc,t60m,fsmax) : bus(8) Where: f1 : crossover frequency (Hz) separating dc and midrange frequencies f2 : frequency (Hz) above f1 where T60 = t60m/2 (see below) t60dc : desired decay time (t60) at frequency 0 (sec) t60m : desired decay time (t60) at midrange frequencies (sec) fsmax : maximum sampling rate to be used (Hz)","title":"Usage"},{"location":"libs/reverbs/#reference_1","text":"http://www.kokkinizita.net/linuxaudio/zita-rev1-doc/quickguide.html https://ccrma.stanford.edu/~jos/pasp/Zita_Rev1.html","title":"Reference"},{"location":"libs/reverbs/#rezita_rev1_stereo","text":"Extend zita_rev_fdn to include zita_rev1 input/output mapping in stereo mode. zita_rev1_stereo is a standard Faust function.","title":"(re.)zita_rev1_stereo"},{"location":"libs/reverbs/#usage_4","text":"_,_ : zita_rev1_stereo(rdel,f1,f2,t60dc,t60m,fsmax) : _,_ Where: rdel = delay (in ms) before reverberation begins (e.g., 0 to ~100 ms) (remaining args and refs as for zita_rev_fdn above)","title":"Usage"},{"location":"libs/reverbs/#rezita_rev1_ambi","text":"Extend zita_rev_fdn to include zita_rev1 input/output mapping in \"ambisonics mode\", as provided in the Linux C++ version.","title":"(re.)zita_rev1_ambi"},{"location":"libs/reverbs/#usage_5","text":"_,_ : zita_rev1_ambi(rgxyz,rdel,f1,f2,t60dc,t60m,fsmax) : _,_,_,_ Where: rgxyz = relative gain of lanes 1,4,2 to lane 0 in output (e.g., -9 to 9) (remaining args and references as for zita_rev1_stereo above)","title":"Usage"},{"location":"libs/reverbs/#freeverb","text":"","title":"Freeverb"},{"location":"libs/reverbs/#remono_freeverb","text":"A simple Schroeder reverberator primarily developed by \"Jezar at Dreampoint\" that is extensively used in the free-software world. It uses four Schroeder allpasses in series and eight parallel Schroeder-Moorer filtered-feedback comb-filters for each audio channel, and is said to be especially well tuned. mono_freeverb is a standard Faust function.","title":"(re.)mono_freeverb"},{"location":"libs/reverbs/#usage_6","text":"_ : mono_freeverb(fb1, fb2, damp, spread) : _; Where: fb1 : coefficient of the lowpass comb filters (0-1) fb2 : coefficient of the allpass comb filters (0-1) damp : damping of the lowpass comb filter (0-1) spread : spatial spread in number of samples (for stereo)","title":"Usage"},{"location":"libs/reverbs/#license","text":"While this version is licensed LGPL (with exception) along with other GRAME library functions, the file freeverb.dsp in the examples directory of older Faust distributions, such as faust-0.9.85, was released under the BSD license, which is less restrictive.","title":"License"},{"location":"libs/reverbs/#restereo_freeverb","text":"A simple Schroeder reverberator primarily developed by \"Jezar at Dreampoint\" that is extensively used in the free-software world. It uses four Schroeder allpasses in series and eight parallel Schroeder-Moorer filtered-feedback comb-filters for each audio channel, and is said to be especially well tuned.","title":"(re.)stereo_freeverb"},{"location":"libs/reverbs/#usage_7","text":"_,_ : stereo_freeverb(fb1, fb2, damp, spread) : _,_; Where: fb1 : coefficient of the lowpass comb filters (0-1) fb2 : coefficient of the allpass comb filters (0-1) damp : damping of the lowpass comb filter (0-1) spread : spatial spread in number of samples (for stereo)","title":"Usage"},{"location":"libs/routes/","text":"routes.lib A library to handle signal routing in Faust. Its official prefix is ro . Functions Reference (ro.)cross Cross n signals: (x1,x2,..,xn) -> (xn,..,x2,x1) . cross is a standard Faust function. Usage cross(n) _,_,_ : cross(3) : _,_,_ Where: n : number of signals (int, must be known at compile time) Note Special case: cross2 : cross2 = _,cross(2),_; (ro.)crossnn Cross two bus(n) s. Usage (si.bus(2*n)) : crossnn(n) : (si.bus(2*n)) Where: n : the number of signals in the bus (ro.)crossn1 Cross bus(n) and bus(1). Usage (si.bus(n),_) : crossn1(n) : (_,si.bus(n)) Where: n : the number of signals in the first bus (ro.)cross1n Cross bus(1) and bus(n). Usage (_,si.bus(n)) : crossn1(n) : (si.bus(n),_) Where: n : the number of signals in the second bus (ro.)crossNM Cross bus(n) and bus(m). Usage (si.bus(n),si.bus(m)) : crossNM(n,m) : (si.bus(m),si.bus(n)) Where: n : the number of signals in the first bus m : the number of signals in the second bus (ro.)interleave Interleave row col cables from column order to row order. input : x(0), x(1), x(2) ..., x(row col-1) output: x(0+0 row), x(0+1 row), x(0+2 row), ..., x(1+0 row), x(1+1 row), x(1+2 row), ... Usage _,_,_,_,_,_ : interleave(row,column) : _,_,_,_,_,_ Where: row : the number of row (int, known at compile time) column : the number of column (int, known at compile time) (ro.)butterfly Addition (first half) then substraction (second half) of interleaved signals. Usage _,_,_,_ : butterfly(n) : _,_,_,_ Where: n : size of the butterfly (n is int, even and known at compile time) (ro.)hadamard Hadamard matrix function of size n = 2^k . Usage _,_,_,_ : hadamard(n) : _,_,_,_ Where: n : 2^k , size of the matrix (int, must be known at compile time) Note: Implementation contributed by Remy Muller. (ro.)recursivize Create a recursion from two arbitrary processors p and q. Usage _,_ : recursivize(p,q) : _,_ Where: p : the forward arbitrary processor q : the feedback arbitrary processor","title":" routes "},{"location":"libs/routes/#routeslib","text":"A library to handle signal routing in Faust. Its official prefix is ro .","title":"routes.lib"},{"location":"libs/routes/#functions-reference","text":"","title":"Functions Reference"},{"location":"libs/routes/#rocross","text":"Cross n signals: (x1,x2,..,xn) -> (xn,..,x2,x1) . cross is a standard Faust function.","title":"(ro.)cross"},{"location":"libs/routes/#usage","text":"cross(n) _,_,_ : cross(3) : _,_,_ Where: n : number of signals (int, must be known at compile time)","title":"Usage"},{"location":"libs/routes/#note","text":"Special case: cross2 : cross2 = _,cross(2),_;","title":"Note"},{"location":"libs/routes/#rocrossnn","text":"Cross two bus(n) s.","title":"(ro.)crossnn"},{"location":"libs/routes/#usage_1","text":"(si.bus(2*n)) : crossnn(n) : (si.bus(2*n)) Where: n : the number of signals in the bus","title":"Usage"},{"location":"libs/routes/#rocrossn1","text":"Cross bus(n) and bus(1).","title":"(ro.)crossn1"},{"location":"libs/routes/#usage_2","text":"(si.bus(n),_) : crossn1(n) : (_,si.bus(n)) Where: n : the number of signals in the first bus","title":"Usage"},{"location":"libs/routes/#rocross1n","text":"Cross bus(1) and bus(n).","title":"(ro.)cross1n"},{"location":"libs/routes/#usage_3","text":"(_,si.bus(n)) : crossn1(n) : (si.bus(n),_) Where: n : the number of signals in the second bus","title":"Usage"},{"location":"libs/routes/#rocrossnm","text":"Cross bus(n) and bus(m).","title":"(ro.)crossNM"},{"location":"libs/routes/#usage_4","text":"(si.bus(n),si.bus(m)) : crossNM(n,m) : (si.bus(m),si.bus(n)) Where: n : the number of signals in the first bus m : the number of signals in the second bus","title":"Usage"},{"location":"libs/routes/#rointerleave","text":"Interleave row col cables from column order to row order. input : x(0), x(1), x(2) ..., x(row col-1) output: x(0+0 row), x(0+1 row), x(0+2 row), ..., x(1+0 row), x(1+1 row), x(1+2 row), ...","title":"(ro.)interleave"},{"location":"libs/routes/#usage_5","text":"_,_,_,_,_,_ : interleave(row,column) : _,_,_,_,_,_ Where: row : the number of row (int, known at compile time) column : the number of column (int, known at compile time)","title":"Usage"},{"location":"libs/routes/#robutterfly","text":"Addition (first half) then substraction (second half) of interleaved signals.","title":"(ro.)butterfly"},{"location":"libs/routes/#usage_6","text":"_,_,_,_ : butterfly(n) : _,_,_,_ Where: n : size of the butterfly (n is int, even and known at compile time)","title":"Usage"},{"location":"libs/routes/#rohadamard","text":"Hadamard matrix function of size n = 2^k .","title":"(ro.)hadamard"},{"location":"libs/routes/#usage_7","text":"_,_,_,_ : hadamard(n) : _,_,_,_ Where: n : 2^k , size of the matrix (int, must be known at compile time)","title":"Usage"},{"location":"libs/routes/#note_1","text":"Implementation contributed by Remy Muller.","title":"Note:"},{"location":"libs/routes/#rorecursivize","text":"Create a recursion from two arbitrary processors p and q.","title":"(ro.)recursivize"},{"location":"libs/routes/#usage_8","text":"_,_ : recursivize(p,q) : _,_ Where: p : the forward arbitrary processor q : the feedback arbitrary processor","title":"Usage"},{"location":"libs/signals/","text":"signals.lib A library of basic elements to handle signals in Faust. Its official prefix is si . Functions Reference (si.)bus Put n cables in parallel. bus is a standard Faust function. Usage bus(N) bus(4) : _,_,_,_ Where: N : is an integer known at compile time that indicates the number of parallel cables (si.)block Block - terminate N signals. block is a standard Faust function. Usage _,_,... : block(n) : _,... Where: N : the number of signals to be blocked known at compile time (si.)interpolate Linear interpolation between two signals. Usage _,_ : interpolate(i) : _ Where: i : interpolation control between 0 and 1 (0: first input; 1: second input) (si.)smoo Smoothing function based on smooth ideal to smooth UI signals (sliders, etc.) down. smoo is a standard Faust function. Usage hslider(...) : smoo; (si.)polySmooth A smoothing function based on smooth that doesn't smooth when a trigger signal is given. This is very useful when making polyphonic synthesizer to make sure that the value of the parameter is the right one when the note is started. Usage hslider(...) : polySmooth(g,s,d) : _ Where: g : the gate/trigger signal used when making polyphonic synths s : the smoothness (see smooth ) d : the number of samples to wait before the signal start being smoothed after g switched to 1 (si.)smoothAndH A smoothing function based on smooth that holds its output signal when a trigger is sent to it. This feature is convenient when implementing polyphonic instruments to prevent some smoothed parameter to change when a note-off event is sent. Usage hslider(...) : smoothAndH(g,s) : _ Where: g : the hold signal (0 for hold, 1 for bypass) s : the smoothness (see smooth ) (si.)bsmooth Block smooth linear interpolation during a block of samples. Usage hslider(...) : bsmooth : _ (si.)dot Dot product for two vectors of size N. Usage _,_,_,_,_,_ : dot(N) : _ Where: N : size of the vectors (int, must be known at compile time) (si.)smooth Exponential smoothing by a unity-dc-gain one-pole lowpass. smooth is a standard Faust function. Usage: _ : smooth(tau2pole(tau)) : _ Where: tau : desired smoothing time constant in seconds, or hslider(...) : smooth(s) : _ Where: s : smoothness between 0 and 1. s=0 for no smoothing, s=0.999 is \"very smooth\", s>1 is unstable, and s=1 yields the zero signal for all inputs. The exponential time-constant is approximately 1/(1-s) samples, when s is close to (but less than) 1. Reference: https://ccrma.stanford.edu/~jos/mdft/Convolution_Example_2_ADSR.html (si.)cbus n parallel cables for complex signals. cbus is a standard Faust function. Usage cbus(n) cbus(4) : (r0,i0), (r1,i1), (r2,i2), (r3,i3) Where: n : is an integer known at compile time that indicates the number of parallel cables. each complex number is represented by two real signals as (real,imag) (si.)cmul multiply two complex signals pointwise. cmul is a standard Faust function. Usage (r1,i1) : cmul(r2,i2) : (_,_); Where: Each complex number is represented by two real signals as (real,imag), so (r1,i1) = real and imaginary parts of signal 1 (r2,i2) = real and imaginary parts of signal 2 (si.)cconj complex conjugation of a (complex) signal. cconj is a standard Faust function. Usage (r1,i1) : cconj : (_,_); Where: Each complex number is represented by two real signals as (real,imag), so (r1,i1) = real and imaginary parts of the input signal (r1,-i1) = real and imaginary parts of the output signal (si.)lag_ud Lag filter with separate times for up and down. Usage _ : lag_ud(up, dn) : _; (si.)rev Reverse the input signal by blocks of N>0 samples. rev(1) is the indentity function. rev(N) has a latency of N-1 samples. Usage _ : rev(N) : _; Where: N : the block size","title":" signals "},{"location":"libs/signals/#signalslib","text":"A library of basic elements to handle signals in Faust. Its official prefix is si .","title":"signals.lib"},{"location":"libs/signals/#functions-reference","text":"","title":"Functions Reference"},{"location":"libs/signals/#sibus","text":"Put n cables in parallel. bus is a standard Faust function.","title":"(si.)bus"},{"location":"libs/signals/#usage","text":"bus(N) bus(4) : _,_,_,_ Where: N : is an integer known at compile time that indicates the number of parallel cables","title":"Usage"},{"location":"libs/signals/#siblock","text":"Block - terminate N signals. block is a standard Faust function.","title":"(si.)block"},{"location":"libs/signals/#usage_1","text":"_,_,... : block(n) : _,... Where: N : the number of signals to be blocked known at compile time","title":"Usage"},{"location":"libs/signals/#siinterpolate","text":"Linear interpolation between two signals.","title":"(si.)interpolate"},{"location":"libs/signals/#usage_2","text":"_,_ : interpolate(i) : _ Where: i : interpolation control between 0 and 1 (0: first input; 1: second input)","title":"Usage"},{"location":"libs/signals/#sismoo","text":"Smoothing function based on smooth ideal to smooth UI signals (sliders, etc.) down. smoo is a standard Faust function.","title":"(si.)smoo"},{"location":"libs/signals/#usage_3","text":"hslider(...) : smoo;","title":"Usage"},{"location":"libs/signals/#sipolysmooth","text":"A smoothing function based on smooth that doesn't smooth when a trigger signal is given. This is very useful when making polyphonic synthesizer to make sure that the value of the parameter is the right one when the note is started.","title":"(si.)polySmooth"},{"location":"libs/signals/#usage_4","text":"hslider(...) : polySmooth(g,s,d) : _ Where: g : the gate/trigger signal used when making polyphonic synths s : the smoothness (see smooth ) d : the number of samples to wait before the signal start being smoothed after g switched to 1","title":"Usage"},{"location":"libs/signals/#sismoothandh","text":"A smoothing function based on smooth that holds its output signal when a trigger is sent to it. This feature is convenient when implementing polyphonic instruments to prevent some smoothed parameter to change when a note-off event is sent.","title":"(si.)smoothAndH"},{"location":"libs/signals/#usage_5","text":"hslider(...) : smoothAndH(g,s) : _ Where: g : the hold signal (0 for hold, 1 for bypass) s : the smoothness (see smooth )","title":"Usage"},{"location":"libs/signals/#sibsmooth","text":"Block smooth linear interpolation during a block of samples.","title":"(si.)bsmooth"},{"location":"libs/signals/#usage_6","text":"hslider(...) : bsmooth : _","title":"Usage"},{"location":"libs/signals/#sidot","text":"Dot product for two vectors of size N.","title":"(si.)dot"},{"location":"libs/signals/#usage_7","text":"_,_,_,_,_,_ : dot(N) : _ Where: N : size of the vectors (int, must be known at compile time)","title":"Usage"},{"location":"libs/signals/#sismooth","text":"Exponential smoothing by a unity-dc-gain one-pole lowpass. smooth is a standard Faust function.","title":"(si.)smooth"},{"location":"libs/signals/#usage_8","text":"_ : smooth(tau2pole(tau)) : _ Where: tau : desired smoothing time constant in seconds, or hslider(...) : smooth(s) : _ Where: s : smoothness between 0 and 1. s=0 for no smoothing, s=0.999 is \"very smooth\", s>1 is unstable, and s=1 yields the zero signal for all inputs. The exponential time-constant is approximately 1/(1-s) samples, when s is close to (but less than) 1.","title":"Usage:"},{"location":"libs/signals/#reference","text":"https://ccrma.stanford.edu/~jos/mdft/Convolution_Example_2_ADSR.html","title":"Reference:"},{"location":"libs/signals/#sicbus","text":"n parallel cables for complex signals. cbus is a standard Faust function.","title":"(si.)cbus"},{"location":"libs/signals/#usage_9","text":"cbus(n) cbus(4) : (r0,i0), (r1,i1), (r2,i2), (r3,i3) Where: n : is an integer known at compile time that indicates the number of parallel cables. each complex number is represented by two real signals as (real,imag)","title":"Usage"},{"location":"libs/signals/#sicmul","text":"multiply two complex signals pointwise. cmul is a standard Faust function.","title":"(si.)cmul"},{"location":"libs/signals/#usage_10","text":"(r1,i1) : cmul(r2,i2) : (_,_); Where: Each complex number is represented by two real signals as (real,imag), so (r1,i1) = real and imaginary parts of signal 1 (r2,i2) = real and imaginary parts of signal 2","title":"Usage"},{"location":"libs/signals/#sicconj","text":"complex conjugation of a (complex) signal. cconj is a standard Faust function.","title":"(si.)cconj"},{"location":"libs/signals/#usage_11","text":"(r1,i1) : cconj : (_,_); Where: Each complex number is represented by two real signals as (real,imag), so (r1,i1) = real and imaginary parts of the input signal (r1,-i1) = real and imaginary parts of the output signal","title":"Usage"},{"location":"libs/signals/#silag_ud","text":"Lag filter with separate times for up and down.","title":"(si.)lag_ud"},{"location":"libs/signals/#usage_12","text":"_ : lag_ud(up, dn) : _;","title":"Usage"},{"location":"libs/signals/#sirev","text":"Reverse the input signal by blocks of N>0 samples. rev(1) is the indentity function. rev(N) has a latency of N-1 samples.","title":"(si.)rev"},{"location":"libs/signals/#usage_13","text":"_ : rev(N) : _; Where: N : the block size","title":"Usage"},{"location":"libs/soundfiles/","text":"soundfiles.lib A library to handle soundfiles in Faust. Its official prefix is so . Functions Reference (so.)loop Play a soundfile in a loop taking into account its sampling rate. loop is a standard Faust function. Usage loop(sf, part) Where: sf : the soundfile part : the part in the soundfile list of sounds (so.)loop_speed Play a soundfile in a loop taking into account its sampling rate, with speed control. loop_speed is a standard Faust function. Usage loop_speed(sf, part, speed) Where: sf : the soundfile part : the part in the soundfile list of sounds speed : the speed between 0 and n (so.)loop_speed_level Play a soundfile in a loop taking into account its sampling rate, with speed and level controls. loop_speed_level is a standard Faust function. Usage loop_speed_level(sf, part, speed, level) Where: sf : the soundfile part : the part in the soundfile list of sounds speed : the speed between 0 and n level : the volume between 0 and n","title":" soundfiles "},{"location":"libs/soundfiles/#soundfileslib","text":"A library to handle soundfiles in Faust. Its official prefix is so .","title":"soundfiles.lib"},{"location":"libs/soundfiles/#functions-reference","text":"","title":"Functions Reference"},{"location":"libs/soundfiles/#soloop","text":"Play a soundfile in a loop taking into account its sampling rate. loop is a standard Faust function.","title":"(so.)loop"},{"location":"libs/soundfiles/#usage","text":"loop(sf, part) Where: sf : the soundfile part : the part in the soundfile list of sounds","title":"Usage"},{"location":"libs/soundfiles/#soloop_speed","text":"Play a soundfile in a loop taking into account its sampling rate, with speed control. loop_speed is a standard Faust function.","title":"(so.)loop_speed"},{"location":"libs/soundfiles/#usage_1","text":"loop_speed(sf, part, speed) Where: sf : the soundfile part : the part in the soundfile list of sounds speed : the speed between 0 and n","title":"Usage"},{"location":"libs/soundfiles/#soloop_speed_level","text":"Play a soundfile in a loop taking into account its sampling rate, with speed and level controls. loop_speed_level is a standard Faust function.","title":"(so.)loop_speed_level"},{"location":"libs/soundfiles/#usage_2","text":"loop_speed_level(sf, part, speed, level) Where: sf : the soundfile part : the part in the soundfile list of sounds speed : the speed between 0 and n level : the volume between 0 and n","title":"Usage"},{"location":"libs/spats/","text":"spats.lib This library contains a collection of tools for sound spatialization. Its official prefix is sp . (sp.)panner A simple linear stereo panner. panner is a standard Faust function. Usage _ : panner(g) : _,_ Where: g : the panning (0-1) (sp.)spat GMEM SPAT: n-outputs spatializer. spat is a standard Faust function. Usage _ : spat(n,r,d) : _,_,... Where: n : number of outputs r : rotation (between 0 et 1) d : distance of the source (between 0 et 1) (sp.)stereoize Transform an arbitrary processor p into a stereo processor with 2 inputs and 2 outputs. Usage _,_ : stereoize(p) : _,_ Where: p : the arbitrary processor","title":" spats "},{"location":"libs/spats/#spatslib","text":"This library contains a collection of tools for sound spatialization. Its official prefix is sp .","title":"spats.lib"},{"location":"libs/spats/#sppanner","text":"A simple linear stereo panner. panner is a standard Faust function.","title":"(sp.)panner"},{"location":"libs/spats/#usage","text":"_ : panner(g) : _,_ Where: g : the panning (0-1)","title":"Usage"},{"location":"libs/spats/#spspat","text":"GMEM SPAT: n-outputs spatializer. spat is a standard Faust function.","title":"(sp.)spat"},{"location":"libs/spats/#usage_1","text":"_ : spat(n,r,d) : _,_,... Where: n : number of outputs r : rotation (between 0 et 1) d : distance of the source (between 0 et 1)","title":"Usage"},{"location":"libs/spats/#spstereoize","text":"Transform an arbitrary processor p into a stereo processor with 2 inputs and 2 outputs.","title":"(sp.)stereoize"},{"location":"libs/spats/#usage_2","text":"_,_ : stereoize(p) : _,_ Where: p : the arbitrary processor","title":"Usage"},{"location":"libs/synths/","text":"synths.lib This library contains a collection of synthesizers. Its official prefix is sy . (sy.)popFilterPerc A simple percussion instrument based on a \"popped\" resonant bandpass filter. popFilterPerc is a standard Faust function. Usage popFilterDrum(freq,q,gate) : _; Where: freq : the resonance frequency of the instrument q : the q of the res filter (typically, 5 is a good value) gate : the trigger signal (0 or 1) (sy.)dubDub A simple synth based on a sawtooth wave filtered by a resonant lowpass. dubDub is a standard Faust function. Usage dubDub(freq,ctFreq,q,gate) : _; Where: freq : frequency of the sawtooth ctFreq : cutoff frequency of the filter q : Q of the filter gate : the trigger signal (0 or 1) (sy.)sawTrombone A simple trombone based on a lowpassed sawtooth wave. sawTrombone is a standard Faust function. Usage sawTrombone(att,freq,gain,gate) : _ Where: att : exponential attack duration in s (typically 0.01) freq : the frequency gain : the gain (0-1) gate : the gate (0 or 1) (sy.)combString Simplest string physical model ever based on a comb filter. combString is a standard Faust function. Usage combString(freq,res,gate) : _; Where: freq : the frequency of the string res : string T60 (resonance time) in second gate : trigger signal (0 or 1) (sy.)additiveDrum A simple drum using additive synthesis. additiveDrum is a standard Faust function. Usage additiveDrum(freq,freqRatio,gain,harmDec,att,rel,gate) : _ Where: freq : the resonance frequency of the drum freqRatio : a list of ratio to choose the frequency of the mode in function of freq e.g.(1 1.2 1.5 ...). The first element should always gain : the gain of each mode as a list (1 0.9 0.8 ...). The first element harmDec : harmonic decay ratio (0-1): configure the speed at which att : attack duration in second rel : release duration in second gate : trigger signal (0 or 1) (sy.)fm An FM synthesizer with an arbitrary number of modulators connected as a sequence. fm is a standard Faust function. Usage freqs = (300,400,...); indices = (20,...); fm(freqs,indices) : _ Where: freqs : a list of frequencies where the first one is the frequency of the carrier indices : the indices of modulation (Nfreqs-1)","title":" synths "},{"location":"libs/synths/#synthslib","text":"This library contains a collection of synthesizers. Its official prefix is sy .","title":"synths.lib"},{"location":"libs/synths/#sypopfilterperc","text":"A simple percussion instrument based on a \"popped\" resonant bandpass filter. popFilterPerc is a standard Faust function.","title":"(sy.)popFilterPerc"},{"location":"libs/synths/#usage","text":"popFilterDrum(freq,q,gate) : _; Where: freq : the resonance frequency of the instrument q : the q of the res filter (typically, 5 is a good value) gate : the trigger signal (0 or 1)","title":"Usage"},{"location":"libs/synths/#sydubdub","text":"A simple synth based on a sawtooth wave filtered by a resonant lowpass. dubDub is a standard Faust function.","title":"(sy.)dubDub"},{"location":"libs/synths/#usage_1","text":"dubDub(freq,ctFreq,q,gate) : _; Where: freq : frequency of the sawtooth ctFreq : cutoff frequency of the filter q : Q of the filter gate : the trigger signal (0 or 1)","title":"Usage"},{"location":"libs/synths/#sysawtrombone","text":"A simple trombone based on a lowpassed sawtooth wave. sawTrombone is a standard Faust function.","title":"(sy.)sawTrombone"},{"location":"libs/synths/#usage_2","text":"sawTrombone(att,freq,gain,gate) : _ Where: att : exponential attack duration in s (typically 0.01) freq : the frequency gain : the gain (0-1) gate : the gate (0 or 1)","title":"Usage"},{"location":"libs/synths/#sycombstring","text":"Simplest string physical model ever based on a comb filter. combString is a standard Faust function.","title":"(sy.)combString"},{"location":"libs/synths/#usage_3","text":"combString(freq,res,gate) : _; Where: freq : the frequency of the string res : string T60 (resonance time) in second gate : trigger signal (0 or 1)","title":"Usage"},{"location":"libs/synths/#syadditivedrum","text":"A simple drum using additive synthesis. additiveDrum is a standard Faust function.","title":"(sy.)additiveDrum"},{"location":"libs/synths/#usage_4","text":"additiveDrum(freq,freqRatio,gain,harmDec,att,rel,gate) : _ Where: freq : the resonance frequency of the drum freqRatio : a list of ratio to choose the frequency of the mode in function of freq e.g.(1 1.2 1.5 ...). The first element should always gain : the gain of each mode as a list (1 0.9 0.8 ...). The first element harmDec : harmonic decay ratio (0-1): configure the speed at which att : attack duration in second rel : release duration in second gate : trigger signal (0 or 1)","title":"Usage"},{"location":"libs/synths/#syfm","text":"An FM synthesizer with an arbitrary number of modulators connected as a sequence. fm is a standard Faust function.","title":"(sy.)fm"},{"location":"libs/synths/#usage_5","text":"freqs = (300,400,...); indices = (20,...); fm(freqs,indices) : _ Where: freqs : a list of frequencies where the first one is the frequency of the carrier indices : the indices of modulation (Nfreqs-1)","title":"Usage"},{"location":"libs/vaeffects/","text":"vaeffects.lib A library of virtual analog filter effects. Its official prefix is ve . Moog Filters (ve.)moog_vcf Moog \"Voltage Controlled Filter\" (VCF) in \"analog\" form. Moog VCF implemented using the same logical block diagram as the classic analog circuit. As such, it neglects the one-sample delay associated with the feedback path around the four one-poles. This extra delay alters the response, especially at high frequencies (see reference [1] for details). See moog_vcf_2b below for a more accurate implementation. Usage moog_vcf(res,fr) Where: res : normalized amount of corner-resonance between 0 and 1 (0 is no resonance, 1 is maximum) fr : corner-resonance frequency in Hz (less than SR/6.3 or so) References https://ccrma.stanford.edu/~stilti/papers/moogvcf.pdf https://ccrma.stanford.edu/~jos/pasp/vegf.html (ve.)moog_vcf_2b[n] Moog \"Voltage Controlled Filter\" (VCF) as two biquads. Implementation of the ideal Moog VCF transfer function factored into second-order sections. As a result, it is more accurate than moog_vcf above, but its coefficient formulas are more complex when one or both parameters are varied. Here, res is the fourth root of that in moog_vcf , so, as the sampling rate approaches infinity, moog_vcf(res,fr) becomes equivalent to moog_vcf_2b[n](res^4,fr) (when res and fr are constant). moog_vcf_2b uses two direct-form biquads ( tf2 ). moog_vcf_2bn uses two protected normalized-ladder biquads ( tf2np ). Usage moog_vcf_2b(res,fr) moog_vcf_2bn(res,fr) Where: res : normalized amount of corner-resonance between 0 and 1 (0 is min resonance, 1 is maximum) fr : corner-resonance frequency in Hz (ve.)moogLadder Virtual analog model of the 4th-order Moog Ladder, which is arguably the most well-known ladder filter in analog synthesizers. Several 1st-order filters are cascaded in series. Feedback is then used, in part, to control the cut-off frequency and the resonance. This filter was implemented in Faust by Eric Tarr during the 2019 Embedded DSP With Faust Workshop . References https://www.willpirkle.com/706-2/ http://www.willpirkle.com/Downloads/AN-4VirtualAnalogFilters.pdf Usage _ : moogLadder(normFreq,Q) : _ Where: normFreq : normalized frequency (0-1) Q : q (ve.)moogHalfLadder Virtual analog model of the 2nd-order Moog Half Ladder (simplified version of (ve.)moogLadder ). Several 1st-order filters are cascaded in series. Feedback is then used, in part, to control the cut-off frequency and the resonance. This filter was implemented in Faust by Eric Tarr during the 2019 Embedded DSP With Faust Workshop . References https://www.willpirkle.com/app-notes/virtual-analog-moog-half-ladder-filter http://www.willpirkle.com/Downloads/AN-8MoogHalfLadderFilter.pdf Usage _ : moogHalfLadder(normFreq,Q) : _ Where: normFreq : normalized frequency (0-1) Q : q (ve.)diodeLadder 4th order virtual analog diode ladder filter. In addition to the individual states used within each independent 1st-order filter, there are also additional feedback paths found in the block diagram. These feedback paths are labeled as connecting states. Rather than separately storing these connecting states in the Faust implementation, they are simply implicitly calculated by tracing back to the other states ( s1 , s2 , s3 , s4 ) each recursive step. This filter was implemented in Faust by Eric Tarr during the 2019 Embedded DSP With Faust Workshop . References https://www.willpirkle.com/virtual-analog-diode-ladder-filter/ http://www.willpirkle.com/Downloads/AN-6DiodeLadderFilter.pdf Usage _ : diodeLadder(normFreq,Q) : _ Where: normFreq : normalized frequency (0-1) Q : q Korg 35 Filters The following filters are virtual analog models of the Korg 35 low-pass filter and high-pass filter found in the MS-10 and MS-20 synthesizers. The virtual analog models for the LPF and HPF are different, making these filters more interesting than simply tapping different states of the same circuit. These filters were implemented in Faust by Eric Tarr during the 2019 Embedded DSP With Faust Workshop . Filter history: https://secretlifeofsynthesizers.com/the-korg-35-filter/ (ve.)korg35LPF Virtual analog models of the Korg 35 low-pass filter found in the MS-10 and MS-20 synthesizers. Usage _ : korg35LPF(normFreq,Q) : _ Where: normFreq : normalized frequency (0-1) Q : q (ve.)korg35HPF Virtual analog models of the Korg 35 high-pass filter found in the MS-10 and MS-20 synthesizers. Usage _ : korg35HPF(normFreq,Q) : _ Where: normFreq : normalized frequency (0-1) Q : q Oberheim Filters The following filter (4 types) is an implementation of the virtual analog model described in Section 7.2 of the Will Pirkle book, \"Designing Software Synthesizer Plug-ins in C++\". It is based on the block diagram in Figure 7.5. The Oberheim filter is a state-variable filter with soft-clipping distortion within the circuit. In many VA filters, distortion is accomplished using the \"tanh\" function. For this Faust implementation, that distortion function was replaced with the (ef.)cubicnl function. (ve.)oberheim Generic multi-outputs Oberheim filter that produces the BSF, BPF, HPF and LPF outputs (see description above). Usage _ : oberheim(normFreq,Q) : _,_,_,_ Where: normFreq : normalized frequency (0-1) Q : q (ve.)oberheimBSF Band-Stop Oberheim filter (see description above). Specialize the generic implementation: keep the first BSF output, the compiler will only generate the needed code. Usage _ : oberheimBSF(normFreq,Q) : _ Where: normFreq : normalized frequency (0-1) Q : q (ve.)oberheimBPF Band-Pass Oberheim filter (see description above). Specialize the generic implementation: keep the second BPF output, the compiler will only generate the needed code. Usage _ : oberheimBPF(normFreq,Q) : _ Where: normFreq : normalized frequency (0-1) Q : q (ve.)oberheimHPF High-Pass Oberheim filter (see description above). Specialize the generic implementation: keep the third HPF output, the compiler will only generate the needed code. Usage _ : oberheimHPF(normFreq,Q) : _ Where: normFreq : normalized frequency (0-1) Q : q (ve.)oberheimLPF Low-Pass Oberheim filter (see description above). Specialize the generic implementation: keep the fourth LPF output, the compiler will only generate the needed code. Usage _ : oberheimLPF(normFreq,Q) : _ Where: normFreq : normalized frequency (0-1) Q : q Sallen Key Filters The following filters were implemented based on VA models of synthesizer filters. The modeling approach is based on a Topology Preserving Transform (TPT) to resolve the delay-free feedback loop in the corresponding analog filters. The primary processing block used to build other filters (Moog, Korg, etc.) is based on a 1st-order Sallen-Key filter. The filters included in this script are 1st-order LPF/HPF and 2nd-order state-variable filters capable of LPF, HPF, and BPF. Resources: Vadim Zavalishin (2018) \"The Art of VA Filter Design\", v2.1.0 https://www.native-instruments.com/fileadmin/ni_media/downloads/pdf/VAFilterDesign_2.1.0.pdf Will Pirkle (2014) \"Resolving Delay-Free Loops in Recursive Filters Using the Modified H\u00e4rm\u00e4 Method\", AES 137 http://www.aes.org/e-lib/browse.cfm?elib=17517 Description and diagrams of 1st- and 2nd-order TPT filters: https://www.willpirkle.com/706-2/ (ve.)sallenKeyOnePole Sallen-Key generic One Pole filter that produces the LPF and HPF outputs (see description above). For the Faust implementation of this filter, recursion ( letrec ) is used for storing filter \"states\". The output (e.g. y ) is calculated by using the input signal and the previous states of the filter. During the current recursive step, the states of the filter (e.g. s ) for the next step are also calculated. Admittedly, this is not an efficient way to implement a filter because it requires independently calculating the output and each state during each recursive step. However, it works as a way to store and use \"states\" within the constraints of Faust. The simplest example is the 1st-order LPF (shown on the cover of Zavalishin * 2018 and Fig 4.3 of https://www.willpirkle.com/706-2/ ). Here, the input signal is split in parallel for the calculation of the output signal, y , and the state s . The value of the state is only used for feedback to the next step of recursion. It is blocked (!) from also being routed to the output. A trick used for calculating the state s is to observe that the input to the delay block is the sum of two signal: what appears to be a feedforward path and a feedback path. In reality, the signals being summed are identical (signal*2) plus the value of the current state. Usage _ : sallenKeyOnePole(normFreq) : _,_ Where: normFreq : normalized frequency (0-1) (ve.)sallenKeyOnePoleLPF Sallen-Key One Pole lowpass filter (see description above). Specialize the generic implementation: keep the first LPF output, the compiler will only generate the needed code. Usage _ : sallenKeyOnePoleLPF(normFreq) : _ Where: normFreq : normalized frequency (0-1) (ve.)sallenKeyOnePoleHPF Sallen-Key One Pole Highpass filter (see description above). The dry input signal is routed in parallel to the output. The LPF'd signal is subtracted from the input so that the HPF remains. Specialize the generic implementation: keep the second HPF output, the compiler will only generate the needed code. Usage _ : sallenKeyOnePoleHPF(normFreq) : _ Where: normFreq : normalized frequency (0-1) (ve.)sallenKey2ndOrder Sallen-Key generic 2nd order filter that produces the LPF, BPF and HPF outputs. This is a 2nd-order Sallen-Key state-variable filter. The idea is that by \"tapping\" into different points in the circuit, different filters (LPF,BPF,HPF) can be achieved. See Figure 4.6 of * https://www.willpirkle.com/706-2/ This is also a good example of the next step for generalizing the Faust programming approach used for all these VA filters. In this case, there are three things to calculate each recursive step ( y , s1 , s2 ). For each thing, the circuit is only calculated up to that point. Comparing the LPF to BPF, the output signal ( y ) is calculated similarly. Except, the output of the BPF stops earlier in the circuit. Similarly, the states ( s1 and s2 ) only differ in that s2 includes a couple more terms beyond what is used for s1 . Usage _ : sallenKey2ndOrder(normFreq,Q) : _,_,_ Where: normFreq : normalized frequency (0-1) Q : q (ve.)sallenKey2ndOrderLPF Sallen-Key 2nd order lowpass filter (see description above). Specialize the generic implementation: keep the first LPF output, the compiler will only generate the needed code. Usage _ : sallenKey2ndOrderLPF(normFreq,Q) : _ Where: normFreq : normalized frequency (0-1) Q : q (ve.)sallenKey2ndOrderBPF Sallen-Key 2nd order bandpass filter (see description above). Specialize the generic implementation: keep the second BPF output, the compiler will only generate the needed code. Usage _ : sallenKey2ndOrderBPF(normFreq,Q) : _ Where: normFreq : normalized frequency (0-1) Q : q (ve.)sallenKey2ndOrderHPF Sallen-Key 2nd order highpass filter (see description above). Specialize the generic implementation: keep the third HPF output, the compiler will only generate the needed code. Usage _ : sallenKey2ndOrderHPF(normFreq,Q) : _ Where: normFreq : normalized frequency (0-1) Q : q Effects (ve.)wah4 Wah effect, 4th order. wah4 is a standard Faust function. Usage _ : wah4(fr) : _ Where: fr : resonance frequency in Hz Reference https://ccrma.stanford.edu/~jos/pasp/vegf.html (ve.)autowah Auto-wah effect. autowah is a standard Faust function. Usage _ : autowah(level) : _ Where: level : amount of effect desired (0 to 1). (ve.)crybaby Digitized CryBaby wah pedal. crybaby is a standard Faust function. Usage _ : crybaby(wah) : _ Where: wah : \"pedal angle\" from 0 to 1 Reference https://ccrma.stanford.edu/~jos/pasp/vegf.html (ve.)vocoder A very simple vocoder where the spectrum of the modulation signal is analyzed using a filter bank. vocoder is a standard Faust function. Usage _ : vocoder(nBands,att,rel,BWRatio,source,excitation) : _; Where: nBands : Number of vocoder bands att : Attack time in seconds rel : Release time in seconds BWRatio : Coefficient to adjust the bandwidth of each band (0.1 - 2) source : Modulation signal excitation : Excitation/Carrier signal","title":" vaeffects "},{"location":"libs/vaeffects/#vaeffectslib","text":"A library of virtual analog filter effects. Its official prefix is ve .","title":"vaeffects.lib"},{"location":"libs/vaeffects/#moog-filters","text":"","title":"Moog Filters"},{"location":"libs/vaeffects/#vemoog_vcf","text":"Moog \"Voltage Controlled Filter\" (VCF) in \"analog\" form. Moog VCF implemented using the same logical block diagram as the classic analog circuit. As such, it neglects the one-sample delay associated with the feedback path around the four one-poles. This extra delay alters the response, especially at high frequencies (see reference [1] for details). See moog_vcf_2b below for a more accurate implementation.","title":"(ve.)moog_vcf"},{"location":"libs/vaeffects/#usage","text":"moog_vcf(res,fr) Where: res : normalized amount of corner-resonance between 0 and 1 (0 is no resonance, 1 is maximum) fr : corner-resonance frequency in Hz (less than SR/6.3 or so)","title":"Usage"},{"location":"libs/vaeffects/#references","text":"https://ccrma.stanford.edu/~stilti/papers/moogvcf.pdf https://ccrma.stanford.edu/~jos/pasp/vegf.html","title":"References"},{"location":"libs/vaeffects/#vemoog_vcf_2bn","text":"Moog \"Voltage Controlled Filter\" (VCF) as two biquads. Implementation of the ideal Moog VCF transfer function factored into second-order sections. As a result, it is more accurate than moog_vcf above, but its coefficient formulas are more complex when one or both parameters are varied. Here, res is the fourth root of that in moog_vcf , so, as the sampling rate approaches infinity, moog_vcf(res,fr) becomes equivalent to moog_vcf_2b[n](res^4,fr) (when res and fr are constant). moog_vcf_2b uses two direct-form biquads ( tf2 ). moog_vcf_2bn uses two protected normalized-ladder biquads ( tf2np ).","title":"(ve.)moog_vcf_2b[n]"},{"location":"libs/vaeffects/#usage_1","text":"moog_vcf_2b(res,fr) moog_vcf_2bn(res,fr) Where: res : normalized amount of corner-resonance between 0 and 1 (0 is min resonance, 1 is maximum) fr : corner-resonance frequency in Hz","title":"Usage"},{"location":"libs/vaeffects/#vemoogladder","text":"Virtual analog model of the 4th-order Moog Ladder, which is arguably the most well-known ladder filter in analog synthesizers. Several 1st-order filters are cascaded in series. Feedback is then used, in part, to control the cut-off frequency and the resonance. This filter was implemented in Faust by Eric Tarr during the 2019 Embedded DSP With Faust Workshop .","title":"(ve.)moogLadder"},{"location":"libs/vaeffects/#references_1","text":"https://www.willpirkle.com/706-2/ http://www.willpirkle.com/Downloads/AN-4VirtualAnalogFilters.pdf","title":"References"},{"location":"libs/vaeffects/#usage_2","text":"_ : moogLadder(normFreq,Q) : _ Where: normFreq : normalized frequency (0-1) Q : q","title":"Usage"},{"location":"libs/vaeffects/#vemooghalfladder","text":"Virtual analog model of the 2nd-order Moog Half Ladder (simplified version of (ve.)moogLadder ). Several 1st-order filters are cascaded in series. Feedback is then used, in part, to control the cut-off frequency and the resonance. This filter was implemented in Faust by Eric Tarr during the 2019 Embedded DSP With Faust Workshop .","title":"(ve.)moogHalfLadder"},{"location":"libs/vaeffects/#references_2","text":"https://www.willpirkle.com/app-notes/virtual-analog-moog-half-ladder-filter http://www.willpirkle.com/Downloads/AN-8MoogHalfLadderFilter.pdf","title":"References"},{"location":"libs/vaeffects/#usage_3","text":"_ : moogHalfLadder(normFreq,Q) : _ Where: normFreq : normalized frequency (0-1) Q : q","title":"Usage"},{"location":"libs/vaeffects/#vediodeladder","text":"4th order virtual analog diode ladder filter. In addition to the individual states used within each independent 1st-order filter, there are also additional feedback paths found in the block diagram. These feedback paths are labeled as connecting states. Rather than separately storing these connecting states in the Faust implementation, they are simply implicitly calculated by tracing back to the other states ( s1 , s2 , s3 , s4 ) each recursive step. This filter was implemented in Faust by Eric Tarr during the 2019 Embedded DSP With Faust Workshop .","title":"(ve.)diodeLadder"},{"location":"libs/vaeffects/#references_3","text":"https://www.willpirkle.com/virtual-analog-diode-ladder-filter/ http://www.willpirkle.com/Downloads/AN-6DiodeLadderFilter.pdf","title":"References"},{"location":"libs/vaeffects/#usage_4","text":"_ : diodeLadder(normFreq,Q) : _ Where: normFreq : normalized frequency (0-1) Q : q","title":"Usage"},{"location":"libs/vaeffects/#korg-35-filters","text":"The following filters are virtual analog models of the Korg 35 low-pass filter and high-pass filter found in the MS-10 and MS-20 synthesizers. The virtual analog models for the LPF and HPF are different, making these filters more interesting than simply tapping different states of the same circuit. These filters were implemented in Faust by Eric Tarr during the 2019 Embedded DSP With Faust Workshop .","title":"Korg 35 Filters"},{"location":"libs/vaeffects/#filter-history","text":"https://secretlifeofsynthesizers.com/the-korg-35-filter/","title":"Filter history:"},{"location":"libs/vaeffects/#vekorg35lpf","text":"Virtual analog models of the Korg 35 low-pass filter found in the MS-10 and MS-20 synthesizers.","title":"(ve.)korg35LPF"},{"location":"libs/vaeffects/#usage_5","text":"_ : korg35LPF(normFreq,Q) : _ Where: normFreq : normalized frequency (0-1) Q : q","title":"Usage"},{"location":"libs/vaeffects/#vekorg35hpf","text":"Virtual analog models of the Korg 35 high-pass filter found in the MS-10 and MS-20 synthesizers.","title":"(ve.)korg35HPF"},{"location":"libs/vaeffects/#usage_6","text":"_ : korg35HPF(normFreq,Q) : _ Where: normFreq : normalized frequency (0-1) Q : q","title":"Usage"},{"location":"libs/vaeffects/#oberheim-filters","text":"The following filter (4 types) is an implementation of the virtual analog model described in Section 7.2 of the Will Pirkle book, \"Designing Software Synthesizer Plug-ins in C++\". It is based on the block diagram in Figure 7.5. The Oberheim filter is a state-variable filter with soft-clipping distortion within the circuit. In many VA filters, distortion is accomplished using the \"tanh\" function. For this Faust implementation, that distortion function was replaced with the (ef.)cubicnl function.","title":"Oberheim Filters"},{"location":"libs/vaeffects/#veoberheim","text":"Generic multi-outputs Oberheim filter that produces the BSF, BPF, HPF and LPF outputs (see description above).","title":"(ve.)oberheim"},{"location":"libs/vaeffects/#usage_7","text":"_ : oberheim(normFreq,Q) : _,_,_,_ Where: normFreq : normalized frequency (0-1) Q : q","title":"Usage"},{"location":"libs/vaeffects/#veoberheimbsf","text":"Band-Stop Oberheim filter (see description above). Specialize the generic implementation: keep the first BSF output, the compiler will only generate the needed code.","title":"(ve.)oberheimBSF"},{"location":"libs/vaeffects/#usage_8","text":"_ : oberheimBSF(normFreq,Q) : _ Where: normFreq : normalized frequency (0-1) Q : q","title":"Usage"},{"location":"libs/vaeffects/#veoberheimbpf","text":"Band-Pass Oberheim filter (see description above). Specialize the generic implementation: keep the second BPF output, the compiler will only generate the needed code.","title":"(ve.)oberheimBPF"},{"location":"libs/vaeffects/#usage_9","text":"_ : oberheimBPF(normFreq,Q) : _ Where: normFreq : normalized frequency (0-1) Q : q","title":"Usage"},{"location":"libs/vaeffects/#veoberheimhpf","text":"High-Pass Oberheim filter (see description above). Specialize the generic implementation: keep the third HPF output, the compiler will only generate the needed code.","title":"(ve.)oberheimHPF"},{"location":"libs/vaeffects/#usage_10","text":"_ : oberheimHPF(normFreq,Q) : _ Where: normFreq : normalized frequency (0-1) Q : q","title":"Usage"},{"location":"libs/vaeffects/#veoberheimlpf","text":"Low-Pass Oberheim filter (see description above). Specialize the generic implementation: keep the fourth LPF output, the compiler will only generate the needed code.","title":"(ve.)oberheimLPF"},{"location":"libs/vaeffects/#usage_11","text":"_ : oberheimLPF(normFreq,Q) : _ Where: normFreq : normalized frequency (0-1) Q : q","title":"Usage"},{"location":"libs/vaeffects/#sallen-key-filters","text":"The following filters were implemented based on VA models of synthesizer filters. The modeling approach is based on a Topology Preserving Transform (TPT) to resolve the delay-free feedback loop in the corresponding analog filters. The primary processing block used to build other filters (Moog, Korg, etc.) is based on a 1st-order Sallen-Key filter. The filters included in this script are 1st-order LPF/HPF and 2nd-order state-variable filters capable of LPF, HPF, and BPF.","title":"Sallen Key Filters"},{"location":"libs/vaeffects/#resources","text":"Vadim Zavalishin (2018) \"The Art of VA Filter Design\", v2.1.0 https://www.native-instruments.com/fileadmin/ni_media/downloads/pdf/VAFilterDesign_2.1.0.pdf Will Pirkle (2014) \"Resolving Delay-Free Loops in Recursive Filters Using the Modified H\u00e4rm\u00e4 Method\", AES 137 http://www.aes.org/e-lib/browse.cfm?elib=17517 Description and diagrams of 1st- and 2nd-order TPT filters: https://www.willpirkle.com/706-2/","title":"Resources:"},{"location":"libs/vaeffects/#vesallenkeyonepole","text":"Sallen-Key generic One Pole filter that produces the LPF and HPF outputs (see description above). For the Faust implementation of this filter, recursion ( letrec ) is used for storing filter \"states\". The output (e.g. y ) is calculated by using the input signal and the previous states of the filter. During the current recursive step, the states of the filter (e.g. s ) for the next step are also calculated. Admittedly, this is not an efficient way to implement a filter because it requires independently calculating the output and each state during each recursive step. However, it works as a way to store and use \"states\" within the constraints of Faust. The simplest example is the 1st-order LPF (shown on the cover of Zavalishin * 2018 and Fig 4.3 of https://www.willpirkle.com/706-2/ ). Here, the input signal is split in parallel for the calculation of the output signal, y , and the state s . The value of the state is only used for feedback to the next step of recursion. It is blocked (!) from also being routed to the output. A trick used for calculating the state s is to observe that the input to the delay block is the sum of two signal: what appears to be a feedforward path and a feedback path. In reality, the signals being summed are identical (signal*2) plus the value of the current state.","title":"(ve.)sallenKeyOnePole"},{"location":"libs/vaeffects/#usage_12","text":"_ : sallenKeyOnePole(normFreq) : _,_ Where: normFreq : normalized frequency (0-1)","title":"Usage"},{"location":"libs/vaeffects/#_1","text":"","title":""},{"location":"libs/vaeffects/#vesallenkeyonepolelpf","text":"Sallen-Key One Pole lowpass filter (see description above). Specialize the generic implementation: keep the first LPF output, the compiler will only generate the needed code.","title":"(ve.)sallenKeyOnePoleLPF"},{"location":"libs/vaeffects/#usage_13","text":"_ : sallenKeyOnePoleLPF(normFreq) : _ Where: normFreq : normalized frequency (0-1)","title":"Usage"},{"location":"libs/vaeffects/#_2","text":"","title":""},{"location":"libs/vaeffects/#vesallenkeyonepolehpf","text":"Sallen-Key One Pole Highpass filter (see description above). The dry input signal is routed in parallel to the output. The LPF'd signal is subtracted from the input so that the HPF remains. Specialize the generic implementation: keep the second HPF output, the compiler will only generate the needed code.","title":"(ve.)sallenKeyOnePoleHPF"},{"location":"libs/vaeffects/#usage_14","text":"_ : sallenKeyOnePoleHPF(normFreq) : _ Where: normFreq : normalized frequency (0-1)","title":"Usage"},{"location":"libs/vaeffects/#vesallenkey2ndorder","text":"Sallen-Key generic 2nd order filter that produces the LPF, BPF and HPF outputs. This is a 2nd-order Sallen-Key state-variable filter. The idea is that by \"tapping\" into different points in the circuit, different filters (LPF,BPF,HPF) can be achieved. See Figure 4.6 of * https://www.willpirkle.com/706-2/ This is also a good example of the next step for generalizing the Faust programming approach used for all these VA filters. In this case, there are three things to calculate each recursive step ( y , s1 , s2 ). For each thing, the circuit is only calculated up to that point. Comparing the LPF to BPF, the output signal ( y ) is calculated similarly. Except, the output of the BPF stops earlier in the circuit. Similarly, the states ( s1 and s2 ) only differ in that s2 includes a couple more terms beyond what is used for s1 .","title":"(ve.)sallenKey2ndOrder"},{"location":"libs/vaeffects/#usage_15","text":"_ : sallenKey2ndOrder(normFreq,Q) : _,_,_ Where: normFreq : normalized frequency (0-1) Q : q","title":"Usage"},{"location":"libs/vaeffects/#vesallenkey2ndorderlpf","text":"Sallen-Key 2nd order lowpass filter (see description above). Specialize the generic implementation: keep the first LPF output, the compiler will only generate the needed code.","title":"(ve.)sallenKey2ndOrderLPF"},{"location":"libs/vaeffects/#usage_16","text":"_ : sallenKey2ndOrderLPF(normFreq,Q) : _ Where: normFreq : normalized frequency (0-1) Q : q","title":"Usage"},{"location":"libs/vaeffects/#vesallenkey2ndorderbpf","text":"Sallen-Key 2nd order bandpass filter (see description above). Specialize the generic implementation: keep the second BPF output, the compiler will only generate the needed code.","title":"(ve.)sallenKey2ndOrderBPF"},{"location":"libs/vaeffects/#usage_17","text":"_ : sallenKey2ndOrderBPF(normFreq,Q) : _ Where: normFreq : normalized frequency (0-1) Q : q","title":"Usage"},{"location":"libs/vaeffects/#vesallenkey2ndorderhpf","text":"Sallen-Key 2nd order highpass filter (see description above). Specialize the generic implementation: keep the third HPF output, the compiler will only generate the needed code.","title":"(ve.)sallenKey2ndOrderHPF"},{"location":"libs/vaeffects/#usage_18","text":"_ : sallenKey2ndOrderHPF(normFreq,Q) : _ Where: normFreq : normalized frequency (0-1) Q : q","title":"Usage"},{"location":"libs/vaeffects/#effects","text":"","title":"Effects"},{"location":"libs/vaeffects/#vewah4","text":"Wah effect, 4th order. wah4 is a standard Faust function.","title":"(ve.)wah4"},{"location":"libs/vaeffects/#usage_19","text":"_ : wah4(fr) : _ Where: fr : resonance frequency in Hz","title":"Usage"},{"location":"libs/vaeffects/#reference","text":"https://ccrma.stanford.edu/~jos/pasp/vegf.html","title":"Reference"},{"location":"libs/vaeffects/#veautowah","text":"Auto-wah effect. autowah is a standard Faust function.","title":"(ve.)autowah"},{"location":"libs/vaeffects/#usage_20","text":"_ : autowah(level) : _ Where: level : amount of effect desired (0 to 1).","title":"Usage"},{"location":"libs/vaeffects/#vecrybaby","text":"Digitized CryBaby wah pedal. crybaby is a standard Faust function.","title":"(ve.)crybaby"},{"location":"libs/vaeffects/#usage_21","text":"_ : crybaby(wah) : _ Where: wah : \"pedal angle\" from 0 to 1","title":"Usage"},{"location":"libs/vaeffects/#reference_1","text":"https://ccrma.stanford.edu/~jos/pasp/vegf.html","title":"Reference"},{"location":"libs/vaeffects/#vevocoder","text":"A very simple vocoder where the spectrum of the modulation signal is analyzed using a filter bank. vocoder is a standard Faust function.","title":"(ve.)vocoder"},{"location":"libs/vaeffects/#usage_22","text":"_ : vocoder(nBands,att,rel,BWRatio,source,excitation) : _; Where: nBands : Number of vocoder bands att : Attack time in seconds rel : Release time in seconds BWRatio : Coefficient to adjust the bandwidth of each band (0.1 - 2) source : Modulation signal excitation : Excitation/Carrier signal","title":"Usage"},{"location":"libs/version/","text":"version.lib Semantic versioning for the Faust libraries. Its official prefix is vl . (vl.)version Return the version number of the Faust standard libraries. Usage version : _,_,_","title":"version.lib"},{"location":"libs/version/#versionlib","text":"Semantic versioning for the Faust libraries. Its official prefix is vl .","title":"version.lib"},{"location":"libs/version/#vlversion","text":"Return the version number of the Faust standard libraries.","title":"(vl.)version"},{"location":"libs/version/#usage","text":"version : _,_,_","title":"Usage"},{"location":"libs/wavedigitalfilters/","text":"wavedigitalfilters.lib A library of basic adaptors and methods to help construct Wave Digital Filter models in Faust. Its official prefix is wd . Algebraic One Port Adaptors (wd.)resistor Resistor A basic adaptor implementing a resistor for use within Wave Digital Filter connection trees It should be used as a leaf/terminating element of the connection tree Usage r1(i) = resistor(i, R); buildtree( A : r1 ); Where: i : index used by model-building functions. Should never be user declared. R : Resistance/Impedance of the resistor being modeled in Ohms. Note: The adaptor must be declared as a separate function before integration into the connection tree. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.1 (wd.)resistor_output Resistor + voltage Out A basic adaptor implementing a resistor for use within Wave Digital Filter connection trees It should be used as a leaf/terminating element of the connection tree The resistor will also pass the voltage across itself as an output of the model Usage rout(i) = resistor_output(i, R); buildtree( A : rout ) : _; Where: i : index used by model-building functions. Should never be user declared. R : Resistance/Impedance of the resistor being modeled in Ohms. Note: The adaptor must be declared as a separate function before integration into the connection tree. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.1 (wd.)resistor_output_current Resistor + current Out A basic adaptor implementing a resistor for use within Wave Digital Filter connection trees It should be used as a leaf/terminating element of the connection tree The resistor will also pass the current through itself as an output of the model Usage rout(i) = resistor_output_current(i, R); buildtree( A : rout ) : _; Where: i : index used by model-building functions. Should never be user declared. R : Resistance/Impedance of the resistor being modeled in Ohms. Note: The adaptor must be declared as a separate function before integration into the connection tree. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.1 (wd.)u_voltage Ideal Voltage Source (Unadapted) An adaptor implementing an ideal voltage source within Wave Digital Filter connection trees. It should be used as the root/top element of the connection tree Can be used for either DC (constant) or AC (signal) voltage sources. Usage v1(i) = u_Voltage(i, ein); buildtree( v1 : B ); Where: i : index used by model-building functions. Should never be user declared. ein : Voltage/Potential across ideal voltage source in Volts Note: Only usable as the root of a tree The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.2 (wd.)u_current Resistive Current Source (Unadapted) An unadapted adaptor implementing an ideal current source within Wave Digital Filter connection trees. It should be used as the root/top element of the connection tree Can be used for either DC (constant) or AC (signal) current sources. Usage i1(i) = u_current(i, jin); buildtree( i1 : B ); Where: i : index used by model-building functions. Should never be user declared. jin : Current through the ideal current source in Amps Note: Only usable as the root of a tree The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.3 (wd.)resVoltage Resistive Voltage Source An adaptor implementing a resitive voltage source within Wave Digital Filter connection trees. It should be used as a leaf/terminating element of the connection tree It is comprised of an ideal voltage source in series with a resistor Can be used for either DC (constant) or AC (signal) voltage sources. Usage v1(i) = resVoltage(i, R, ein); buildtree( A : v1 ); Where: i : index used by model-building functions. Should never be user declared. R : Reistance/Impedence of the series resistor in Ohms ein : Voltage/Potential of the ideal voltage source in Volts Note: The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.4 (wd.)resVoltage_output Resistive Voltage Source + voltage output An adaptor implementing a resitive voltage source within Wave Digital Filter connection trees. It should be used as a leaf/terminating element of the connection tree It is comprised of an ideal voltage source in series with a resistor Can be used for either DC (constant) or AC (signal) voltage sources. The resistive voltage source will also pass the voltage across it as an output of the model Usage vout(i) = resVoltage_output(i, R, ein); buildtree( A : vout ) : _; Where: i : index used by model-building functions. Should never be user declared. R : Reistance/Impedence of the series resistor in Ohms ein : Voltage/Potential across ideal voltage source in Volts Note: The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.4 (wd.)u_resVoltage Resistive Voltage Source (Unadapted) An unadapted adaptor implementing a resitive voltage source within Wave Digital Filter connection trees. It should be used as the root/top element of the connection tree It is comprised of an ideal voltage source in series with a resistor Can be used for either DC (constant) or AC (signal) voltage sources. Usage v1(i) = u_resVoltage(i, R, ein); buildtree( v1 : B ); Where: i : index used by model-building functions. Should never be user declared. R : Reistance/Impedence of the series resistor in Ohms ein : Voltage/Potential across ideal voltage source in Volts Note: Only usable as the root of a tree The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.4 (wd.)resCurrent Resistive Current Source An adaptor implementing a resitive current source within Wave Digital Filter connection trees. It should be used as a leaf/terminating element of the connection tree It is comprised of an ideal current source in parallel with a resistor Can be used for either DC (constant) or AC (signal) current sources. Usage i1(i) = resCurrent(i, R, jin); buildtree( A : i1 ); Where: i : index used by model-building functions. Should never be user declared. R : Reistance/Impedence of the parallel resistor in Ohms jin : Current through the ideal current source in Amps Note: The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.5 (wd.)u_resCurrent Resistive Current Source (Uadapted) An unadapted adaptor implementing a resitive current source within Wave Digital Filter connection trees. It should be used as the root/top element of the connection tree It is comprised of an ideal current source in parallel with a resistor Can be used for either DC (constant) or AC (signal) current sources. Usage i1(i) = u_resCurrent(i, R, jin); buildtree( i1 : B ); Where: i : index used by model-building functions. Should never be user declared. R : Reistance/Impedence of the series resistor in Ohms jin : Current through the ideal current source in Amps Note: Only usable as the root of a tree The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.5 (wd.)u_switch Ideal Switch (Unadapted) An unadapted adaptor implementing an ideal switch for Wave Digital Filter connection trees. It should be used as the root/top element of the connection tree Usage s1(i) = u_resCurrent(i, lambda); buildtree( s1 : B ); Where: i : index used by model-building functions. Should never be user declared. lambda : switch state control. -1 for closed switch, 1 for open switch. Note: Only usable as the root of a tree The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.8 Reactive One Port Adaptors (wd.)capacitor Capacitor A basic adaptor implementing a capacitor for use within Wave Digital Filter connection trees It should be used as a leaf/terminating element of the connection tree This capacitor model was digitized using the bi-linear transform Usage c1(i) = capacitor(i, R); buildtree( A : c1 ) : _; Where: i : index used by model-building functions. Should never be user declared. R : Capacitance/Impedence of the capacitor being modeled in Farads. Note: The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.3.1 (wd.)capacitor_output Capacitor + voltage out A basic adaptor implementing a capacitor for use within Wave Digital Filter connection trees It should be used as a leaf/terminating element of the connection tree The capacitor will also pass the voltage across itself as an output of the model This capacitor model was digitized using the bi-linear transform Usage cout(i) = capacitor_output(i, R); buildtree( A : cout ) : _; Where: i : index used by model-building functions. Should never be user declared. R : Capacitance/Impedence of the capacitor being modeled in Farads. Note: The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.3.1 (wd.)inductor Inductor A basic adaptor implementing an inductor for use within Wave Digital Filter connection trees It should be used as a leaf/terminating element of the connection tree This inductor model was digitized using the bi-linear transform Usage l1(i) = inductor(i, R); buildtree( A : l1 ); Where: i : index used by model-building functions. Should never be user declared. R : Inductance/Impedence of the inductor being modeled in Henries. Note: The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.3.2 (wd.)inductor_output Inductor + Voltage out A basic adaptor implementing an inductor for use within Wave Digital Filter connection trees It should be used as a leaf/terminating element of the connection tree The inductor will also pass the voltage across itself as an output of the model This inductor model was digitized using the bi-linear transform Usage lout(i) = inductor_output(i, R); buildtree( A : lout ) : _; Where: i : index used by model-building functions. Should never be user declared. R : Inductance/Impedence of the inductor being modeled in Henries. Note: The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.3.2 Nonlinear One Port Adaptors (wd.)u_idealDiode Ideal Diode (Unadapted) An unadapted adaptor implementing an ideal diode for Wave Digital Filter connection trees. It should be used as the root/top element of the connection tree Usage buildtree( u_idealDiode : B ); Note: Only usable as the root of a tree Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 3.2.3 (wd.)u_chua Chua Diode (Unadapted) An adaptor implementing the chua diode / non-linear resistor within Wave Digital Filter connection trees. It should be used as the root/top element of the connection tree Usage chua1(i) = u_chua(i, G1, G2, V0); buildtree( chua1 : B ) ; Where: i : index used by model-building functions. Should never be user declared. G1 : resistance parameter 1 of the chua diode G2 : resistance parameter 2 of the chua diode V0 : voltage parameter of the chua diode Note: Only usable as the root of a tree The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above. Reference Meerkotter and Scholz, \"Digital Simulation of Nonlinear Circuits by Wave Digital Filter Principles\" (wd.)lambert An implementation of the lambert function It uses Halley's method of iteration to aproximate the output Indluded in the wdf library for use in non-linear diode models adapted from K M Brigg's c++ lambert function approximator Usage lambert(n, itr) : _; Where: * n : value at which the lambert function will be evaluated * itr : number of iterations before output (wd.)u_diodePair A pair of diodes facing in opposite directions An unadapted adaptor implementing two antiparallel diodes for Wave Digital Filter connection trees. The behavior is approximated using Schottkey's ideal diode law Usage d1 = u_diodePair(i, Is, Vt); buildtree( d1 : B ); Where: i : index used by model-building functions. Should never be user declared. Is : saturation current of the diodes Vt : thermal resistances of the diodes Note: Only usable as the root of a tree Correct implementation is shown above. Reference K. Werner et al. \"An Improved and Generalized Diode Clipper Model for Wave Digital Filters\" (wd.)u_diodeSingle A single diode An unadapted adaptor implementing a single diode for Wave Digital Filter connection trees. The behavior is approximated using Schottkey's ideal diode law Usage d1 = u_diodeSingle(i, Is, Vt); buildtree( d1 : B ); Where: i : index used by model-building functions. Should never be user declared. Is : saturation current of the diodes Vt : thermal resistances of the diodes Note: Only usable as the root of a tree Correct implementation is shown above. Reference K. Werner et al. \"An Improved and Generalized Diode Clipper Model for Wave Digital Filters\" (wd.)u_diodeAntiparallel A set of antiparallel diodes with M diodes facing forwards and N diodes facing backwards An unadapted adaptor implementing antiparallel diodes for Wave Digital Filter connection trees. The behavior is approximated using Schottkey's ideal diode law Usage d1 = u_diodeAntiparallel(i, Is, Vt); buildtree( d1 : B ); Where: i : index used by model-building functions. Should never be user declared. Is : saturation current of the diodes Vt : thermal resistances of the diodes Note: Only usable as the root of a tree Correct implementation is shown above. Reference K. Werner et al. \"An Improved and Generalized Diode Clipper Model for Wave Digital Filters\" Two Port Adaptors (wd.)u_parallel_2 2-port parallel adaptor (Unadapted) An unadapted adaptor implementing a 2-port parallel connection between adaptors for Wave Digital Filter connection trees. Elements connected to this adaptor will behave as if connected in parallel in circuit Usage buildtree( u_parallel_2 : (A, B) ); Note: Only usable as the root of a tree This adaptor has no user-accessible parameters. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.4.1 (wd.)parallel_2 2-port parallel adaptor An adaptor implementing a 2-port parallel connection between adaptors for Wave Digital Filter connection trees. Elements connected to this adaptor will behave as if connected in parallel in circuit Usage buildtree( A : parallel_2 : B ); Note: This adaptor has no user-accessible parameters. It should be used within the connection tree with one previous and one forward adaptor Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.4.1 (wd.)u_series_2 2-port series adaptor (Unadapted) An unadapted adaptor implementing a 2-port series connection between adaptors for Wave Digital Filter connection trees. Elements connected to this adaptor will behave as if connected in series in circuit Usage buildtree( u_series_2 : (A, B) ); Note: Only usable as the root of a tree This adaptor has no user-accessible parameters. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.4.1 (wd.)series_2 2-port series adaptor An adaptor implementing a 2-port series connection between adaptors for Wave Digital Filter connection trees. Elements connected to this adaptor will behave as if connected in series in circuit Usage buildtree( A : series_2 : B ); Note: This adaptor has no user-accessible parameters. It should be used within the connection tree with one previous and one forward adaptor Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.4.1 (wd.)parallel_current 2-port parallel adaptor + ideal current source An adaptor implementing a 2-port series connection and internal idealized current source between adaptors for Wave Digital Filter connection trees. This adaptor connects the two connected elements and an additional ideal current source in parallel Usage i1 = parallel_current(i, jin); buildtree(A : i1 : B); Where: i : index used by model-building functions. Should never be user declared. jin : Current through the ideal current source in Amps Note: The adaptor must be declared as a seperate function before integration into the connection tree. It should be used within a connection tree with one previous and one forward adaptor Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.4.2 (wd.)series_voltage 2-port series adaptor + ideal voltage source An adaptor implementing a 2-port series connection and internal ideal voltage source between adaptors for Wave Digital Filter connection trees. This adaptor connects the two connected adaptors and an additional ideal voltage source in series Usage v1 = series_voltage(i, vin) buildtree( A : v1 : B ); Where: i : index used by model-building functions. Should never be user declared. vin : voltage across the ideal current source in Volts Note: The adaptor must be declared as a seperate function before integration into the connection tree. It should be used within the connection tree with one previous and one forward adaptor Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.4.2 Three Port Adaptors (wd.)parallel 3-port parallel adaptor An adaptor implementing a 3-port parallel connection between adaptors for Wave Digital Filter connection trees. This adaptor is used to connect adaptors simulating components connected in parallel in the circuit Usage buildtree( A : parallel : (B, C) ); Note: This adaptor has no user-accessible parameters. It should be used within the connection tree with one previous and two forward adaptors Reference K. Werner Dissertation, 1.5.1 (wd.)series 3-port series adaptor An adaptor implementing a 3-port series connection between adaptors for Wave Digital Filter connection trees. This adaptor is used to connect adaptors simulating components connected in series in the circuit Usage tree = A : (series : (B, C)); Note: This adaptor has no user-accessible parameters. It should be used within the connection tree with one previous and two forward adaptors Reference K. Werner Dissertation, 1.5.2 Model Building Functions (wd.)builddown function for building the strucutre for calculating waves travling down the WDF connection tree It recursively steps through the given tree, parametrizes the adaptors, and builds an algorithm It is used in conjunction with the buildup() function to create a full structure Usage builddown(A : B)~buildup(A : B); Where: * (A : B) : is a connection tree composed of WDF adaptors (wd.)buildup function for building the strucutre for calculating waves travling up the WDF connection tree It recursively steps through the given tree, parametrizes the adaptors, and builds an algorithm It is used in conjunction with the builddown() function to create a full structure Usage builddown(A : B)~buildup(A : B); Where: * (A : B) : is a connection tree composed of WDF adaptors (wd.)getres function for determining the upward-facing port resistance of a partial WDF connection tree It recursively steps through the given tree, parametrizes the adaptors, and builds and algorithm It is used by the buildup and builddown functions but is also helpful in testing Usage getres(A : B)~getres(A : B); Where: * (A : B) : is a partial connection tree composed of WDF adaptors Note: This function cannot be used on a complete WDF tree. When called on an unadapted adaptor (u_ prefix), it will create errors (wd.)parres function for determining the upward-facing port resistance of a partial WDF connection tree It recursively steps through the given tree, parametrizes the adaptors, and builds and algorithm It is used by the buildup and builddown functions but is also helpful in testing this function is a parallelized version of getres Usage parres((A , B))~parres((A , B)); Where: * (A , B) : is a partial connection tree composed of WDF adaptors Note: This function cannot be used on a complete WDF tree. When called on an unadapted adaptor (u_ prefix), it will create errors (wd.)buildout function for creating the output matrix for a WDF connection tree It recursively steps through the given tree and creates an output matrix passing only outputs Usage buildout( A : B ); Where: * (A : B) : is a connection tree composed of WDF adaptors (wd.)buildtree function for building the functioning DSP model from a WDF connection tree It recursively steps through the given tree, parametrizes the adaptors, and builds the algorithm Usage buildtree(A : B); Where: * (A : B) : a connection tree composed of WDF adaptors","title":" wavedigitalfilters "},{"location":"libs/wavedigitalfilters/#wavedigitalfilterslib","text":"A library of basic adaptors and methods to help construct Wave Digital Filter models in Faust. Its official prefix is wd .","title":"wavedigitalfilters.lib"},{"location":"libs/wavedigitalfilters/#algebraic-one-port-adaptors","text":"","title":"Algebraic One Port Adaptors"},{"location":"libs/wavedigitalfilters/#wdresistor","text":"Resistor A basic adaptor implementing a resistor for use within Wave Digital Filter connection trees It should be used as a leaf/terminating element of the connection tree","title":"(wd.)resistor"},{"location":"libs/wavedigitalfilters/#usage","text":"r1(i) = resistor(i, R); buildtree( A : r1 ); Where: i : index used by model-building functions. Should never be user declared. R : Resistance/Impedance of the resistor being modeled in Ohms. Note: The adaptor must be declared as a separate function before integration into the connection tree. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wavedigitalfilters/#reference","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.1","title":"Reference"},{"location":"libs/wavedigitalfilters/#wdresistor_output","text":"Resistor + voltage Out A basic adaptor implementing a resistor for use within Wave Digital Filter connection trees It should be used as a leaf/terminating element of the connection tree The resistor will also pass the voltage across itself as an output of the model","title":"(wd.)resistor_output"},{"location":"libs/wavedigitalfilters/#usage_1","text":"rout(i) = resistor_output(i, R); buildtree( A : rout ) : _; Where: i : index used by model-building functions. Should never be user declared. R : Resistance/Impedance of the resistor being modeled in Ohms. Note: The adaptor must be declared as a separate function before integration into the connection tree. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wavedigitalfilters/#reference_1","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.1","title":"Reference"},{"location":"libs/wavedigitalfilters/#wdresistor_output_current","text":"Resistor + current Out A basic adaptor implementing a resistor for use within Wave Digital Filter connection trees It should be used as a leaf/terminating element of the connection tree The resistor will also pass the current through itself as an output of the model","title":"(wd.)resistor_output_current"},{"location":"libs/wavedigitalfilters/#usage_2","text":"rout(i) = resistor_output_current(i, R); buildtree( A : rout ) : _; Where: i : index used by model-building functions. Should never be user declared. R : Resistance/Impedance of the resistor being modeled in Ohms. Note: The adaptor must be declared as a separate function before integration into the connection tree. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wavedigitalfilters/#reference_2","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.1","title":"Reference"},{"location":"libs/wavedigitalfilters/#wdu_voltage","text":"Ideal Voltage Source (Unadapted) An adaptor implementing an ideal voltage source within Wave Digital Filter connection trees. It should be used as the root/top element of the connection tree Can be used for either DC (constant) or AC (signal) voltage sources.","title":"(wd.)u_voltage"},{"location":"libs/wavedigitalfilters/#usage_3","text":"v1(i) = u_Voltage(i, ein); buildtree( v1 : B ); Where: i : index used by model-building functions. Should never be user declared. ein : Voltage/Potential across ideal voltage source in Volts Note: Only usable as the root of a tree The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wavedigitalfilters/#reference_3","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.2","title":"Reference"},{"location":"libs/wavedigitalfilters/#wdu_current","text":"Resistive Current Source (Unadapted) An unadapted adaptor implementing an ideal current source within Wave Digital Filter connection trees. It should be used as the root/top element of the connection tree Can be used for either DC (constant) or AC (signal) current sources.","title":"(wd.)u_current"},{"location":"libs/wavedigitalfilters/#usage_4","text":"i1(i) = u_current(i, jin); buildtree( i1 : B ); Where: i : index used by model-building functions. Should never be user declared. jin : Current through the ideal current source in Amps Note: Only usable as the root of a tree The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wavedigitalfilters/#reference_4","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.3","title":"Reference"},{"location":"libs/wavedigitalfilters/#wdresvoltage","text":"Resistive Voltage Source An adaptor implementing a resitive voltage source within Wave Digital Filter connection trees. It should be used as a leaf/terminating element of the connection tree It is comprised of an ideal voltage source in series with a resistor Can be used for either DC (constant) or AC (signal) voltage sources.","title":"(wd.)resVoltage"},{"location":"libs/wavedigitalfilters/#usage_5","text":"v1(i) = resVoltage(i, R, ein); buildtree( A : v1 ); Where: i : index used by model-building functions. Should never be user declared. R : Reistance/Impedence of the series resistor in Ohms ein : Voltage/Potential of the ideal voltage source in Volts Note: The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wavedigitalfilters/#reference_5","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.4","title":"Reference"},{"location":"libs/wavedigitalfilters/#wdresvoltage_output","text":"Resistive Voltage Source + voltage output An adaptor implementing a resitive voltage source within Wave Digital Filter connection trees. It should be used as a leaf/terminating element of the connection tree It is comprised of an ideal voltage source in series with a resistor Can be used for either DC (constant) or AC (signal) voltage sources. The resistive voltage source will also pass the voltage across it as an output of the model","title":"(wd.)resVoltage_output"},{"location":"libs/wavedigitalfilters/#usage_6","text":"vout(i) = resVoltage_output(i, R, ein); buildtree( A : vout ) : _; Where: i : index used by model-building functions. Should never be user declared. R : Reistance/Impedence of the series resistor in Ohms ein : Voltage/Potential across ideal voltage source in Volts Note: The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wavedigitalfilters/#reference_6","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.4","title":"Reference"},{"location":"libs/wavedigitalfilters/#wdu_resvoltage","text":"Resistive Voltage Source (Unadapted) An unadapted adaptor implementing a resitive voltage source within Wave Digital Filter connection trees. It should be used as the root/top element of the connection tree It is comprised of an ideal voltage source in series with a resistor Can be used for either DC (constant) or AC (signal) voltage sources.","title":"(wd.)u_resVoltage"},{"location":"libs/wavedigitalfilters/#usage_7","text":"v1(i) = u_resVoltage(i, R, ein); buildtree( v1 : B ); Where: i : index used by model-building functions. Should never be user declared. R : Reistance/Impedence of the series resistor in Ohms ein : Voltage/Potential across ideal voltage source in Volts Note: Only usable as the root of a tree The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wavedigitalfilters/#reference_7","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.4","title":"Reference"},{"location":"libs/wavedigitalfilters/#wdrescurrent","text":"Resistive Current Source An adaptor implementing a resitive current source within Wave Digital Filter connection trees. It should be used as a leaf/terminating element of the connection tree It is comprised of an ideal current source in parallel with a resistor Can be used for either DC (constant) or AC (signal) current sources.","title":"(wd.)resCurrent"},{"location":"libs/wavedigitalfilters/#usage_8","text":"i1(i) = resCurrent(i, R, jin); buildtree( A : i1 ); Where: i : index used by model-building functions. Should never be user declared. R : Reistance/Impedence of the parallel resistor in Ohms jin : Current through the ideal current source in Amps Note: The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wavedigitalfilters/#reference_8","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.5","title":"Reference"},{"location":"libs/wavedigitalfilters/#wdu_rescurrent","text":"Resistive Current Source (Uadapted) An unadapted adaptor implementing a resitive current source within Wave Digital Filter connection trees. It should be used as the root/top element of the connection tree It is comprised of an ideal current source in parallel with a resistor Can be used for either DC (constant) or AC (signal) current sources.","title":"(wd.)u_resCurrent"},{"location":"libs/wavedigitalfilters/#usage_9","text":"i1(i) = u_resCurrent(i, R, jin); buildtree( i1 : B ); Where: i : index used by model-building functions. Should never be user declared. R : Reistance/Impedence of the series resistor in Ohms jin : Current through the ideal current source in Amps Note: Only usable as the root of a tree The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wavedigitalfilters/#reference_9","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.5","title":"Reference"},{"location":"libs/wavedigitalfilters/#wdu_switch","text":"Ideal Switch (Unadapted) An unadapted adaptor implementing an ideal switch for Wave Digital Filter connection trees. It should be used as the root/top element of the connection tree","title":"(wd.)u_switch"},{"location":"libs/wavedigitalfilters/#usage_10","text":"s1(i) = u_resCurrent(i, lambda); buildtree( s1 : B ); Where: i : index used by model-building functions. Should never be user declared. lambda : switch state control. -1 for closed switch, 1 for open switch. Note: Only usable as the root of a tree The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wavedigitalfilters/#reference_10","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.8","title":"Reference"},{"location":"libs/wavedigitalfilters/#reactive-one-port-adaptors","text":"","title":"Reactive One Port Adaptors"},{"location":"libs/wavedigitalfilters/#wdcapacitor","text":"Capacitor A basic adaptor implementing a capacitor for use within Wave Digital Filter connection trees It should be used as a leaf/terminating element of the connection tree This capacitor model was digitized using the bi-linear transform","title":"(wd.)capacitor"},{"location":"libs/wavedigitalfilters/#usage_11","text":"c1(i) = capacitor(i, R); buildtree( A : c1 ) : _; Where: i : index used by model-building functions. Should never be user declared. R : Capacitance/Impedence of the capacitor being modeled in Farads. Note: The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wavedigitalfilters/#reference_11","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.3.1","title":"Reference"},{"location":"libs/wavedigitalfilters/#wdcapacitor_output","text":"Capacitor + voltage out A basic adaptor implementing a capacitor for use within Wave Digital Filter connection trees It should be used as a leaf/terminating element of the connection tree The capacitor will also pass the voltage across itself as an output of the model This capacitor model was digitized using the bi-linear transform","title":"(wd.)capacitor_output"},{"location":"libs/wavedigitalfilters/#usage_12","text":"cout(i) = capacitor_output(i, R); buildtree( A : cout ) : _; Where: i : index used by model-building functions. Should never be user declared. R : Capacitance/Impedence of the capacitor being modeled in Farads. Note: The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wavedigitalfilters/#reference_12","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.3.1","title":"Reference"},{"location":"libs/wavedigitalfilters/#wdinductor","text":"Inductor A basic adaptor implementing an inductor for use within Wave Digital Filter connection trees It should be used as a leaf/terminating element of the connection tree This inductor model was digitized using the bi-linear transform","title":"(wd.)inductor"},{"location":"libs/wavedigitalfilters/#usage_13","text":"l1(i) = inductor(i, R); buildtree( A : l1 ); Where: i : index used by model-building functions. Should never be user declared. R : Inductance/Impedence of the inductor being modeled in Henries. Note: The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wavedigitalfilters/#reference_13","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.3.2","title":"Reference"},{"location":"libs/wavedigitalfilters/#wdinductor_output","text":"Inductor + Voltage out A basic adaptor implementing an inductor for use within Wave Digital Filter connection trees It should be used as a leaf/terminating element of the connection tree The inductor will also pass the voltage across itself as an output of the model This inductor model was digitized using the bi-linear transform","title":"(wd.)inductor_output"},{"location":"libs/wavedigitalfilters/#usage_14","text":"lout(i) = inductor_output(i, R); buildtree( A : lout ) : _; Where: i : index used by model-building functions. Should never be user declared. R : Inductance/Impedence of the inductor being modeled in Henries. Note: The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wavedigitalfilters/#reference_14","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.3.2","title":"Reference"},{"location":"libs/wavedigitalfilters/#nonlinear-one-port-adaptors","text":"","title":"Nonlinear One Port Adaptors"},{"location":"libs/wavedigitalfilters/#wdu_idealdiode","text":"Ideal Diode (Unadapted) An unadapted adaptor implementing an ideal diode for Wave Digital Filter connection trees. It should be used as the root/top element of the connection tree","title":"(wd.)u_idealDiode"},{"location":"libs/wavedigitalfilters/#usage_15","text":"buildtree( u_idealDiode : B ); Note: Only usable as the root of a tree Correct implementation is shown above.","title":"Usage"},{"location":"libs/wavedigitalfilters/#reference_15","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 3.2.3","title":"Reference"},{"location":"libs/wavedigitalfilters/#wdu_chua","text":"Chua Diode (Unadapted) An adaptor implementing the chua diode / non-linear resistor within Wave Digital Filter connection trees. It should be used as the root/top element of the connection tree","title":"(wd.)u_chua"},{"location":"libs/wavedigitalfilters/#usage_16","text":"chua1(i) = u_chua(i, G1, G2, V0); buildtree( chua1 : B ) ; Where: i : index used by model-building functions. Should never be user declared. G1 : resistance parameter 1 of the chua diode G2 : resistance parameter 2 of the chua diode V0 : voltage parameter of the chua diode Note: Only usable as the root of a tree The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wavedigitalfilters/#reference_16","text":"Meerkotter and Scholz, \"Digital Simulation of Nonlinear Circuits by Wave Digital Filter Principles\"","title":"Reference"},{"location":"libs/wavedigitalfilters/#wdlambert","text":"An implementation of the lambert function It uses Halley's method of iteration to aproximate the output Indluded in the wdf library for use in non-linear diode models adapted from K M Brigg's c++ lambert function approximator","title":"(wd.)lambert"},{"location":"libs/wavedigitalfilters/#usage_17","text":"lambert(n, itr) : _; Where: * n : value at which the lambert function will be evaluated * itr : number of iterations before output","title":"Usage"},{"location":"libs/wavedigitalfilters/#wdu_diodepair","text":"A pair of diodes facing in opposite directions An unadapted adaptor implementing two antiparallel diodes for Wave Digital Filter connection trees. The behavior is approximated using Schottkey's ideal diode law","title":"(wd.)u_diodePair"},{"location":"libs/wavedigitalfilters/#usage_18","text":"d1 = u_diodePair(i, Is, Vt); buildtree( d1 : B ); Where: i : index used by model-building functions. Should never be user declared. Is : saturation current of the diodes Vt : thermal resistances of the diodes Note: Only usable as the root of a tree Correct implementation is shown above.","title":"Usage"},{"location":"libs/wavedigitalfilters/#reference_17","text":"K. Werner et al. \"An Improved and Generalized Diode Clipper Model for Wave Digital Filters\"","title":"Reference"},{"location":"libs/wavedigitalfilters/#wdu_diodesingle","text":"A single diode An unadapted adaptor implementing a single diode for Wave Digital Filter connection trees. The behavior is approximated using Schottkey's ideal diode law","title":"(wd.)u_diodeSingle"},{"location":"libs/wavedigitalfilters/#usage_19","text":"d1 = u_diodeSingle(i, Is, Vt); buildtree( d1 : B ); Where: i : index used by model-building functions. Should never be user declared. Is : saturation current of the diodes Vt : thermal resistances of the diodes Note: Only usable as the root of a tree Correct implementation is shown above.","title":"Usage"},{"location":"libs/wavedigitalfilters/#reference_18","text":"K. Werner et al. \"An Improved and Generalized Diode Clipper Model for Wave Digital Filters\"","title":"Reference"},{"location":"libs/wavedigitalfilters/#wdu_diodeantiparallel","text":"A set of antiparallel diodes with M diodes facing forwards and N diodes facing backwards An unadapted adaptor implementing antiparallel diodes for Wave Digital Filter connection trees. The behavior is approximated using Schottkey's ideal diode law","title":"(wd.)u_diodeAntiparallel"},{"location":"libs/wavedigitalfilters/#usage_20","text":"d1 = u_diodeAntiparallel(i, Is, Vt); buildtree( d1 : B ); Where: i : index used by model-building functions. Should never be user declared. Is : saturation current of the diodes Vt : thermal resistances of the diodes Note: Only usable as the root of a tree Correct implementation is shown above.","title":"Usage"},{"location":"libs/wavedigitalfilters/#reference_19","text":"K. Werner et al. \"An Improved and Generalized Diode Clipper Model for Wave Digital Filters\"","title":"Reference"},{"location":"libs/wavedigitalfilters/#two-port-adaptors","text":"","title":"Two Port Adaptors"},{"location":"libs/wavedigitalfilters/#wdu_parallel_2","text":"2-port parallel adaptor (Unadapted) An unadapted adaptor implementing a 2-port parallel connection between adaptors for Wave Digital Filter connection trees. Elements connected to this adaptor will behave as if connected in parallel in circuit","title":"(wd.)u_parallel_2"},{"location":"libs/wavedigitalfilters/#usage_21","text":"buildtree( u_parallel_2 : (A, B) ); Note: Only usable as the root of a tree This adaptor has no user-accessible parameters. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wavedigitalfilters/#reference_20","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.4.1","title":"Reference"},{"location":"libs/wavedigitalfilters/#wdparallel_2","text":"2-port parallel adaptor An adaptor implementing a 2-port parallel connection between adaptors for Wave Digital Filter connection trees. Elements connected to this adaptor will behave as if connected in parallel in circuit","title":"(wd.)parallel_2"},{"location":"libs/wavedigitalfilters/#usage_22","text":"buildtree( A : parallel_2 : B ); Note: This adaptor has no user-accessible parameters. It should be used within the connection tree with one previous and one forward adaptor Correct implementation is shown above.","title":"Usage"},{"location":"libs/wavedigitalfilters/#reference_21","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.4.1","title":"Reference"},{"location":"libs/wavedigitalfilters/#wdu_series_2","text":"2-port series adaptor (Unadapted) An unadapted adaptor implementing a 2-port series connection between adaptors for Wave Digital Filter connection trees. Elements connected to this adaptor will behave as if connected in series in circuit","title":"(wd.)u_series_2"},{"location":"libs/wavedigitalfilters/#usage_23","text":"buildtree( u_series_2 : (A, B) ); Note: Only usable as the root of a tree This adaptor has no user-accessible parameters. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wavedigitalfilters/#reference_22","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.4.1","title":"Reference"},{"location":"libs/wavedigitalfilters/#wdseries_2","text":"2-port series adaptor An adaptor implementing a 2-port series connection between adaptors for Wave Digital Filter connection trees. Elements connected to this adaptor will behave as if connected in series in circuit","title":"(wd.)series_2"},{"location":"libs/wavedigitalfilters/#usage_24","text":"buildtree( A : series_2 : B ); Note: This adaptor has no user-accessible parameters. It should be used within the connection tree with one previous and one forward adaptor Correct implementation is shown above.","title":"Usage"},{"location":"libs/wavedigitalfilters/#reference_23","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.4.1","title":"Reference"},{"location":"libs/wavedigitalfilters/#wdparallel_current","text":"2-port parallel adaptor + ideal current source An adaptor implementing a 2-port series connection and internal idealized current source between adaptors for Wave Digital Filter connection trees. This adaptor connects the two connected elements and an additional ideal current source in parallel","title":"(wd.)parallel_current"},{"location":"libs/wavedigitalfilters/#usage_25","text":"i1 = parallel_current(i, jin); buildtree(A : i1 : B); Where: i : index used by model-building functions. Should never be user declared. jin : Current through the ideal current source in Amps Note: The adaptor must be declared as a seperate function before integration into the connection tree. It should be used within a connection tree with one previous and one forward adaptor Correct implementation is shown above.","title":"Usage"},{"location":"libs/wavedigitalfilters/#reference_24","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.4.2","title":"Reference"},{"location":"libs/wavedigitalfilters/#wdseries_voltage","text":"2-port series adaptor + ideal voltage source An adaptor implementing a 2-port series connection and internal ideal voltage source between adaptors for Wave Digital Filter connection trees. This adaptor connects the two connected adaptors and an additional ideal voltage source in series","title":"(wd.)series_voltage"},{"location":"libs/wavedigitalfilters/#usage_26","text":"v1 = series_voltage(i, vin) buildtree( A : v1 : B ); Where: i : index used by model-building functions. Should never be user declared. vin : voltage across the ideal current source in Volts Note: The adaptor must be declared as a seperate function before integration into the connection tree. It should be used within the connection tree with one previous and one forward adaptor","title":"Usage"},{"location":"libs/wavedigitalfilters/#reference_25","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.4.2","title":"Reference"},{"location":"libs/wavedigitalfilters/#three-port-adaptors","text":"","title":"Three Port Adaptors"},{"location":"libs/wavedigitalfilters/#wdparallel","text":"3-port parallel adaptor An adaptor implementing a 3-port parallel connection between adaptors for Wave Digital Filter connection trees. This adaptor is used to connect adaptors simulating components connected in parallel in the circuit","title":"(wd.)parallel"},{"location":"libs/wavedigitalfilters/#usage_27","text":"buildtree( A : parallel : (B, C) ); Note: This adaptor has no user-accessible parameters. It should be used within the connection tree with one previous and two forward adaptors","title":"Usage"},{"location":"libs/wavedigitalfilters/#reference_26","text":"K. Werner Dissertation, 1.5.1","title":"Reference"},{"location":"libs/wavedigitalfilters/#wdseries","text":"3-port series adaptor An adaptor implementing a 3-port series connection between adaptors for Wave Digital Filter connection trees. This adaptor is used to connect adaptors simulating components connected in series in the circuit","title":"(wd.)series"},{"location":"libs/wavedigitalfilters/#usage_28","text":"tree = A : (series : (B, C)); Note: This adaptor has no user-accessible parameters. It should be used within the connection tree with one previous and two forward adaptors","title":"Usage"},{"location":"libs/wavedigitalfilters/#reference_27","text":"K. Werner Dissertation, 1.5.2","title":"Reference"},{"location":"libs/wavedigitalfilters/#model-building-functions","text":"","title":"Model Building Functions"},{"location":"libs/wavedigitalfilters/#wdbuilddown","text":"function for building the strucutre for calculating waves travling down the WDF connection tree It recursively steps through the given tree, parametrizes the adaptors, and builds an algorithm It is used in conjunction with the buildup() function to create a full structure","title":"(wd.)builddown"},{"location":"libs/wavedigitalfilters/#usage_29","text":"builddown(A : B)~buildup(A : B); Where: * (A : B) : is a connection tree composed of WDF adaptors","title":"Usage"},{"location":"libs/wavedigitalfilters/#wdbuildup","text":"function for building the strucutre for calculating waves travling up the WDF connection tree It recursively steps through the given tree, parametrizes the adaptors, and builds an algorithm It is used in conjunction with the builddown() function to create a full structure","title":"(wd.)buildup"},{"location":"libs/wavedigitalfilters/#usage_30","text":"builddown(A : B)~buildup(A : B); Where: * (A : B) : is a connection tree composed of WDF adaptors","title":"Usage"},{"location":"libs/wavedigitalfilters/#wdgetres","text":"function for determining the upward-facing port resistance of a partial WDF connection tree It recursively steps through the given tree, parametrizes the adaptors, and builds and algorithm It is used by the buildup and builddown functions but is also helpful in testing","title":"(wd.)getres"},{"location":"libs/wavedigitalfilters/#usage_31","text":"getres(A : B)~getres(A : B); Where: * (A : B) : is a partial connection tree composed of WDF adaptors Note: This function cannot be used on a complete WDF tree. When called on an unadapted adaptor (u_ prefix), it will create errors","title":"Usage"},{"location":"libs/wavedigitalfilters/#wdparres","text":"function for determining the upward-facing port resistance of a partial WDF connection tree It recursively steps through the given tree, parametrizes the adaptors, and builds and algorithm It is used by the buildup and builddown functions but is also helpful in testing this function is a parallelized version of getres","title":"(wd.)parres"},{"location":"libs/wavedigitalfilters/#usage_32","text":"parres((A , B))~parres((A , B)); Where: * (A , B) : is a partial connection tree composed of WDF adaptors Note: This function cannot be used on a complete WDF tree. When called on an unadapted adaptor (u_ prefix), it will create errors","title":"Usage"},{"location":"libs/wavedigitalfilters/#wdbuildout","text":"function for creating the output matrix for a WDF connection tree It recursively steps through the given tree and creates an output matrix passing only outputs","title":"(wd.)buildout"},{"location":"libs/wavedigitalfilters/#usage_33","text":"buildout( A : B ); Where: * (A : B) : is a connection tree composed of WDF adaptors","title":"Usage"},{"location":"libs/wavedigitalfilters/#wdbuildtree","text":"function for building the functioning DSP model from a WDF connection tree It recursively steps through the given tree, parametrizes the adaptors, and builds the algorithm","title":"(wd.)buildtree"},{"location":"libs/wavedigitalfilters/#usage_34","text":"buildtree(A : B); Where: * (A : B) : a connection tree composed of WDF adaptors","title":"Usage"},{"location":"libs/wdmodels/","text":"wdmodels.lib A library of basic adaptors and methods to help construct Wave Digital Filter models in Faust. Its official prefix is wd . Algebraic One Port Adaptors (wd.)resistor Resistor A basic adaptor implementing a resistor for use within Wave Digital Filter connection trees. It should be used as a leaf/terminating element of the connection tree. Usage r1(i) = resistor(i, R); buildtree( A : r1 ); Where: i : index used by model-building functions. Should never be user declared. R : Resistance/Impedance of the resistor being modeled in Ohms. Note: The adaptor must be declared as a separate function before integration into the connection tree. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.1 (wd.)resistor_output Resistor + voltage Out. A basic adaptor implementing a resistor for use within Wave Digital Filter connection trees. It should be used as a leaf/terminating element of the connection tree. The resistor will also pass the voltage across itself as an output of the model. Usage rout(i) = resistor_output(i, R); buildtree( A : rout ) : _; Where: i : index used by model-building functions. Should never be user declared. R : Resistance/Impedance of the resistor being modeled in Ohms. Note: The adaptor must be declared as a separate function before integration into the connection tree. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.1 (wd.)resistor_output_current Resistor + current Out. A basic adaptor implementing a resistor for use within Wave Digital Filter connection trees. It should be used as a leaf/terminating element of the connection tree. The resistor will also pass the current through itself as an output of the model. Usage rout(i) = resistor_output_current(i, R); buildtree( A : rout ) : _; Where: i : index used by model-building functions. Should never be user declared. R : Resistance/Impedance of the resistor being modeled in Ohms. Note: The adaptor must be declared as a separate function before integration into the connection tree. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.1 (wd.)u_voltage Ideal Voltage Source (Unadapted). An adaptor implementing an ideal voltage source within Wave Digital Filter connection trees. It should be used as the root/top element of the connection tree. Can be used for either DC (constant) or AC (signal) voltage sources. Usage v1(i) = u_Voltage(i, ein); buildtree( v1 : B ); Where: i : index used by model-building functions. Should never be user declared. ein : Voltage/Potential across ideal voltage source in Volts Note: Only usable as the root of a tree The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.2 (wd.)u_current Resistive Current Source (Unadapted). An unadapted adaptor implementing an ideal current source within Wave Digital Filter connection trees. It should be used as the root/top element of the connection tree. Can be used for either DC (constant) or AC (signal) current sources. Usage i1(i) = u_current(i, jin); buildtree( i1 : B ); Where: i : index used by model-building functions. Should never be user declared. jin : Current through the ideal current source in Amps Note: Only usable as the root of a tree. The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.3 (wd.)resVoltage Resistive Voltage Source. An adaptor implementing a resitive voltage source within Wave Digital Filter connection trees. It should be used as a leaf/terminating element of the connection tree. It is comprised of an ideal voltage source in series with a resistor. Can be used for either DC (constant) or AC (signal) voltage sources. Usage v1(i) = resVoltage(i, R, ein); buildtree( A : v1 ); Where: i : index used by model-building functions. Should never be user declared R : Resistance/Impedence of the series resistor in Ohms ein : Voltage/Potential of the ideal voltage source in Volts Note: The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.4 (wd.)resVoltage_output Resistive Voltage Source + voltage output. An adaptor implementing a resitive voltage source within Wave Digital Filter connection trees. It should be used as a leaf/terminating element of the connection tree. It is comprised of an ideal voltage source in series with a resistor. Can be used for either DC (constant) or AC (signal) voltage sources. The resistive voltage source will also pass the voltage across it as an output of the model. Usage vout(i) = resVoltage_output(i, R, ein); buildtree( A : vout ) : _; Where: i : index used by model-building functions. Should never be user declared R : Resistance/Impedence of the series resistor in Ohms ein : Voltage/Potential across ideal voltage source in Volts Note: The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.4 (wd.)u_resVoltage Resistive Voltage Source (Unadapted). An unadapted adaptor implementing a resitive voltage source within Wave Digital Filter connection trees. It should be used as the root/top element of the connection tree. It is comprised of an ideal voltage source in series with a resistor. Can be used for either DC (constant) or AC (signal) voltage sources. Usage v1(i) = u_resVoltage(i, R, ein); buildtree( v1 : B ); Where: i : index used by model-building functions. Should never be user declared R : Resistance/Impedence of the series resistor in Ohms ein : Voltage/Potential across ideal voltage source in Volts Note: Only usable as the root of a tree. The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.4 (wd.)resCurrent Resistive Current Source. An adaptor implementing a resitive current source within Wave Digital Filter connection trees. It should be used as a leaf/terminating element of the connection tree. It is comprised of an ideal current source in parallel with a resistor. Can be used for either DC (constant) or AC (signal) current sources. Usage i1(i) = resCurrent(i, R, jin); buildtree( A : i1 ); Where: i : index used by model-building functions. Should never be user declared. R : Resistance/Impedence of the parallel resistor in Ohms jin : Current through the ideal current source in Amps Note: The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.5 (wd.)u_resCurrent Resistive Current Source (Uadapted). An unadapted adaptor implementing a resitive current source within Wave Digital Filter connection trees. It should be used as the root/top element of the connection tree It is comprised of an ideal current source in parallel with a resistor Can be used for either DC (constant) or AC (signal) current sources. Usage i1(i) = u_resCurrent(i, R, jin); buildtree( i1 : B ); Where: i : index used by model-building functions. Should never be user declared. R : Resistance/Impedence of the series resistor in Ohms jin : Current through the ideal current source in Amps Note: Only usable as the root of a tree. The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.5 (wd.)u_switch Ideal Switch (Unadapted). An unadapted adaptor implementing an ideal switch for Wave Digital Filter connection trees. It should be used as the root/top element of the connection tree Usage s1(i) = u_resCurrent(i, lambda); buildtree( s1 : B ); Where: i : index used by model-building functions. Should never be user declared. lambda : switch state control. -1 for closed switch, 1 for open switch. Note: Only usable as the root of a tree The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.8 Reactive One Port Adaptors (wd.)capacitor Capacitor. A basic adaptor implementing a capacitor for use within Wave Digital Filter connection trees. It should be used as a leaf/terminating element of the connection tree. This capacitor model was digitized using the bi-linear transform. Usage c1(i) = capacitor(i, R); buildtree( A : c1 ) : _; Where: i : index used by model-building functions. Should never be user declared. R : Capacitance/Impedence of the capacitor being modeled in Farads. Note: The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.3.1 (wd.)capacitor_output Capacitor + voltage out. A basic adaptor implementing a capacitor for use within Wave Digital Filter connection trees. It should be used as a leaf/terminating element of the connection tree. The capacitor will also pass the voltage across itself as an output of the model. This capacitor model was digitized using the bi-linear transform. Usage cout(i) = capacitor_output(i, R); buildtree( A : cout ) : _; Where: i : index used by model-building functions. Should never be user declared R : Capacitance/Impedence of the capacitor being modeled in Farads Note: The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.3.1 (wd.)inductor Inductor. A basic adaptor implementing an inductor for use within Wave Digital Filter connection trees. It should be used as a leaf/terminating element of the connection tree. This inductor model was digitized using the bi-linear transform. Usage l1(i) = inductor(i, R); buildtree( A : l1 ); Where: i : index used by model-building functions. Should never be user declared R : Inductance/Impedence of the inductor being modeled in Henries Note: The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.3.2 (wd.)inductor_output Inductor + Voltage out. A basic adaptor implementing an inductor for use within Wave Digital Filter connection trees. It should be used as a leaf/terminating element of the connection tree. The inductor will also pass the voltage across itself as an output of the model. This inductor model was digitized using the bi-linear transform. Usage lout(i) = inductor_output(i, R); buildtree( A : lout ) : _; Where: i : index used by model-building functions. Should never be user declared R : Inductance/Impedence of the inductor being modeled in Henries Note: The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.3.2 Nonlinear One Port Adaptors (wd.)u_idealDiode Ideal Diode (Unadapted). An unadapted adaptor implementing an ideal diode for Wave Digital Filter connection trees. It should be used as the root/top element of the connection tree. Usage buildtree( u_idealDiode : B ); Note: Only usable as the root of a tree Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 3.2.3 (wd.)u_chua Chua Diode (Unadapted). An adaptor implementing the chua diode / non-linear resistor within Wave Digital Filter connection trees. It should be used as the root/top element of the connection tree. Usage chua1(i) = u_chua(i, G1, G2, V0); buildtree( chua1 : B ); Where: i : index used by model-building functions. Should never be user declared G1 : resistance parameter 1 of the chua diode G2 : resistance parameter 2 of the chua diode V0 : voltage parameter of the chua diode Note: Only usable as the root of a tree. The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above. Reference Meerkotter and Scholz, \"Digital Simulation of Nonlinear Circuits by Wave Digital Filter Principles\" (wd.)lambert An implementation of the lambert function. It uses Halley's method of iteration to aproximate the output. Included in the WD library for use in non-linear diode models. Adapted from K M Brigg's c++ lambert function approximator. Usage lambert(n, itr) : _; Where: * n : value at which the lambert function will be evaluated * itr : number of iterations before output (wd.)u_diodePair A pair of diodes facing in opposite directions. An unadapted adaptor implementing two antiparallel diodes for Wave Digital Filter connection trees. The behavior is approximated using Schottkey's ideal diode law. Usage d1 = u_diodePair(i, Is, Vt); buildtree( d1 : B ); Where: i : index used by model-building functions. Should never be user declared Is : saturation current of the diodes Vt : thermal resistances of the diodes Note: Only usable as the root of a tree. Correct implementation is shown above. Reference K. Werner et al. \"An Improved and Generalized Diode Clipper Model for Wave Digital Filters\" (wd.)u_diodeSingle A single diode. An unadapted adaptor implementing a single diode for Wave Digital Filter connection trees. The behavior is approximated using Schottkey's ideal diode law. Usage d1 = u_diodeSingle(i, Is, Vt); buildtree( d1 : B ); Where: i : index used by model-building functions. Should never be user declared Is : saturation current of the diodes Vt : thermal resistances of the diodes Note: Only usable as the root of a tree Correct implementation is shown above. Reference K. Werner et al. \"An Improved and Generalized Diode Clipper Model for Wave Digital Filters\" (wd.)u_diodeAntiparallel A set of antiparallel diodes with M diodes facing forwards and N diodes facing backwards. An unadapted adaptor implementing antiparallel diodes for Wave Digital Filter connection trees. The behavior is approximated using Schottkey's ideal diode law. Usage d1 = u_diodeAntiparallel(i, Is, Vt); buildtree( d1 : B ); Where: i : index used by model-building functions. Should never be user declared Is : saturation current of the diodes Vt : thermal resistances of the diodes Note: Only usable as the root of a tree Correct implementation is shown above. Reference K. Werner et al. \"An Improved and Generalized Diode Clipper Model for Wave Digital Filters\" Two Port Adaptors (wd.)u_parallel_2 2-port parallel adaptor (Unadapted). An unadapted adaptor implementing a 2-port parallel connection between adaptors for Wave Digital Filter connection trees. Elements connected to this adaptor will behave as if connected in parallel in circuit. Usage buildtree( u_parallel_2 : (A, B) ); Note: Only usable as the root of a tree. This adaptor has no user-accessible parameters. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.4.1 (wd.)parallel_2 2-port parallel adaptor. An adaptor implementing a 2-port parallel connection between adaptors for Wave Digital Filter connection trees. Elements connected to this adaptor will behave as if connected in parallel in circuit. Usage buildtree( A : parallel_2 : B ); Note: This adaptor has no user-accessible parameters. It should be used within the connection tree with one previous and one forward adaptor. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.4.1 (wd.)u_series_2 2-port series adaptor (Unadapted). An unadapted adaptor implementing a 2-port series connection between adaptors for Wave Digital Filter connection trees. Elements connected to this adaptor will behave as if connected in series in circuit. Usage buildtree( u_series_2 : (A, B) ); Note: Only usable as the root of a tree. This adaptor has no user-accessible parameters. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.4.1 (wd.)series_2 2-port series adaptor. An adaptor implementing a 2-port series connection between adaptors for Wave Digital Filter connection trees. Elements connected to this adaptor will behave as if connected in series in circuit. Usage buildtree( A : series_2 : B ); Note: This adaptor has no user-accessible parameters. It should be used within the connection tree with one previous and one forward adaptor. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.4.1 (wd.)parallel_current 2-port parallel adaptor + ideal current source. An adaptor implementing a 2-port series connection and internal idealized current source between adaptors for Wave Digital Filter connection trees. This adaptor connects the two connected elements and an additional ideal current source in parallel. Usage i1 = parallel_current(i, jin); buildtree(A : i1 : B); Where: i : index used by model-building functions. Should never be user declared jin : Current through the ideal current source in Amps Note: The adaptor must be declared as a seperate function before integration into the connection tree. It should be used within a connection tree with one previous and one forward adaptor. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.4.2 (wd.)series_voltage 2-port series adaptor + ideal voltage source. An adaptor implementing a 2-port series connection and internal ideal voltage source between adaptors for Wave Digital Filter connection trees. This adaptor connects the two connected adaptors and an additional ideal voltage source in series. Usage v1 = series_voltage(i, vin) buildtree( A : v1 : B ); Where: i : index used by model-building functions. Should never be user declared vin : voltage across the ideal current source in Volts Note: The adaptor must be declared as a seperate function before integration into the connection tree. It should be used within the connection tree with one previous and one forward adaptor. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.4.2 Three Port Adaptors (wd.)parallel 3-port parallel adaptor. An adaptor implementing a 3-port parallel connection between adaptors for Wave Digital Filter connection trees. This adaptor is used to connect adaptors simulating components connected in parallel in the circuit. Usage buildtree( A : parallel : (B, C) ); Note: This adaptor has no user-accessible parameters. It should be used within the connection tree with one previous and two forward adaptors. Reference K. Werner Dissertation, 1.5.1 (wd.)series 3-port series adaptor. An adaptor implementing a 3-port series connection between adaptors for Wave Digital Filter connection trees. This adaptor is used to connect adaptors simulating components connected in series in the circuit. Usage tree = A : (series : (B, C)); Note: This adaptor has no user-accessible parameters. It should be used within the connection tree with one previous and two forward adaptors. Reference K. Werner Dissertation, 1.5.2 Model Building Functions (wd.)builddown Function for building the strucutre for calculating waves travling down the WD connection tree. It recursively steps through the given tree, parametrizes the adaptors, and builds an algorithm. It is used in conjunction with the buildup() function to create a full structure. Usage builddown(A : B)~buildup(A : B); Where: * (A : B) : is a connection tree composed of WD adaptors (wd.)buildup Function for building the strucutre for calculating waves travling up the WD connection tree. It recursively steps through the given tree, parametrizes the adaptors, and builds an algorithm. It is used in conjunction with the builddown() function to create a full structure. Usage builddown(A : B)~buildup(A : B); Where: * (A : B) : is a connection tree composed of WD adaptors (wd.)getres Function for determining the upward-facing port resistance of a partial WD connection tree. It recursively steps through the given tree, parametrizes the adaptors, and builds and algorithm. It is used by the buildup and builddown functions but is also helpful in testing. Usage getres(A : B)~getres(A : B); Where: * (A : B) : is a partial connection tree composed of WD adaptors Note: This function cannot be used on a complete WD tree. When called on an unadapted adaptor (u_ prefix), it will create errors (wd.)parres Function for determining the upward-facing port resistance of a partial WD connection tree. It recursively steps through the given tree, parametrizes the adaptors, and builds and algorithm. It is used by the buildup and builddown functions but is also helpful in testing. This function is a parallelized version of getres. Usage parres((A , B))~parres((A , B)); Where: * (A , B) : is a partial connection tree composed of WD adaptors Note: This function cannot be used on a complete WD tree. When called on an unadapted adaptor (u_ prefix), it will create errors (wd.)buildout Function for creating the output matrix for a WD connection tree. It recursively steps through the given tree and creates an output matrix passing only outputs. Usage buildout( A : B ); Where: * (A : B) : is a connection tree composed of WD adaptors (wd.)buildtree Function for building the functioning DSP model from a WD connection tree. It recursively steps through the given tree, parametrizes the adaptors, and builds the algorithm. Usage buildtree(A : B); Where: * (A : B) : a connection tree composed of WD adaptors","title":"wdmodels.lib"},{"location":"libs/wdmodels/#wdmodelslib","text":"A library of basic adaptors and methods to help construct Wave Digital Filter models in Faust. Its official prefix is wd .","title":"wdmodels.lib"},{"location":"libs/wdmodels/#algebraic-one-port-adaptors","text":"","title":"Algebraic One Port Adaptors"},{"location":"libs/wdmodels/#wdresistor","text":"Resistor A basic adaptor implementing a resistor for use within Wave Digital Filter connection trees. It should be used as a leaf/terminating element of the connection tree.","title":"(wd.)resistor"},{"location":"libs/wdmodels/#usage","text":"r1(i) = resistor(i, R); buildtree( A : r1 ); Where: i : index used by model-building functions. Should never be user declared. R : Resistance/Impedance of the resistor being modeled in Ohms. Note: The adaptor must be declared as a separate function before integration into the connection tree. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wdmodels/#reference","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.1","title":"Reference"},{"location":"libs/wdmodels/#wdresistor_output","text":"Resistor + voltage Out. A basic adaptor implementing a resistor for use within Wave Digital Filter connection trees. It should be used as a leaf/terminating element of the connection tree. The resistor will also pass the voltage across itself as an output of the model.","title":"(wd.)resistor_output"},{"location":"libs/wdmodels/#usage_1","text":"rout(i) = resistor_output(i, R); buildtree( A : rout ) : _; Where: i : index used by model-building functions. Should never be user declared. R : Resistance/Impedance of the resistor being modeled in Ohms. Note: The adaptor must be declared as a separate function before integration into the connection tree. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wdmodels/#reference_1","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.1","title":"Reference"},{"location":"libs/wdmodels/#wdresistor_output_current","text":"Resistor + current Out. A basic adaptor implementing a resistor for use within Wave Digital Filter connection trees. It should be used as a leaf/terminating element of the connection tree. The resistor will also pass the current through itself as an output of the model.","title":"(wd.)resistor_output_current"},{"location":"libs/wdmodels/#usage_2","text":"rout(i) = resistor_output_current(i, R); buildtree( A : rout ) : _; Where: i : index used by model-building functions. Should never be user declared. R : Resistance/Impedance of the resistor being modeled in Ohms. Note: The adaptor must be declared as a separate function before integration into the connection tree. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wdmodels/#reference_2","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.1","title":"Reference"},{"location":"libs/wdmodels/#wdu_voltage","text":"Ideal Voltage Source (Unadapted). An adaptor implementing an ideal voltage source within Wave Digital Filter connection trees. It should be used as the root/top element of the connection tree. Can be used for either DC (constant) or AC (signal) voltage sources.","title":"(wd.)u_voltage"},{"location":"libs/wdmodels/#usage_3","text":"v1(i) = u_Voltage(i, ein); buildtree( v1 : B ); Where: i : index used by model-building functions. Should never be user declared. ein : Voltage/Potential across ideal voltage source in Volts Note: Only usable as the root of a tree The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wdmodels/#reference_3","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.2","title":"Reference"},{"location":"libs/wdmodels/#wdu_current","text":"Resistive Current Source (Unadapted). An unadapted adaptor implementing an ideal current source within Wave Digital Filter connection trees. It should be used as the root/top element of the connection tree. Can be used for either DC (constant) or AC (signal) current sources.","title":"(wd.)u_current"},{"location":"libs/wdmodels/#usage_4","text":"i1(i) = u_current(i, jin); buildtree( i1 : B ); Where: i : index used by model-building functions. Should never be user declared. jin : Current through the ideal current source in Amps Note: Only usable as the root of a tree. The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wdmodels/#reference_4","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.3","title":"Reference"},{"location":"libs/wdmodels/#wdresvoltage","text":"Resistive Voltage Source. An adaptor implementing a resitive voltage source within Wave Digital Filter connection trees. It should be used as a leaf/terminating element of the connection tree. It is comprised of an ideal voltage source in series with a resistor. Can be used for either DC (constant) or AC (signal) voltage sources.","title":"(wd.)resVoltage"},{"location":"libs/wdmodels/#usage_5","text":"v1(i) = resVoltage(i, R, ein); buildtree( A : v1 ); Where: i : index used by model-building functions. Should never be user declared R : Resistance/Impedence of the series resistor in Ohms ein : Voltage/Potential of the ideal voltage source in Volts Note: The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wdmodels/#reference_5","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.4","title":"Reference"},{"location":"libs/wdmodels/#wdresvoltage_output","text":"Resistive Voltage Source + voltage output. An adaptor implementing a resitive voltage source within Wave Digital Filter connection trees. It should be used as a leaf/terminating element of the connection tree. It is comprised of an ideal voltage source in series with a resistor. Can be used for either DC (constant) or AC (signal) voltage sources. The resistive voltage source will also pass the voltage across it as an output of the model.","title":"(wd.)resVoltage_output"},{"location":"libs/wdmodels/#usage_6","text":"vout(i) = resVoltage_output(i, R, ein); buildtree( A : vout ) : _; Where: i : index used by model-building functions. Should never be user declared R : Resistance/Impedence of the series resistor in Ohms ein : Voltage/Potential across ideal voltage source in Volts Note: The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wdmodels/#reference_6","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.4","title":"Reference"},{"location":"libs/wdmodels/#wdu_resvoltage","text":"Resistive Voltage Source (Unadapted). An unadapted adaptor implementing a resitive voltage source within Wave Digital Filter connection trees. It should be used as the root/top element of the connection tree. It is comprised of an ideal voltage source in series with a resistor. Can be used for either DC (constant) or AC (signal) voltage sources.","title":"(wd.)u_resVoltage"},{"location":"libs/wdmodels/#usage_7","text":"v1(i) = u_resVoltage(i, R, ein); buildtree( v1 : B ); Where: i : index used by model-building functions. Should never be user declared R : Resistance/Impedence of the series resistor in Ohms ein : Voltage/Potential across ideal voltage source in Volts Note: Only usable as the root of a tree. The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wdmodels/#reference_7","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.4","title":"Reference"},{"location":"libs/wdmodels/#wdrescurrent","text":"Resistive Current Source. An adaptor implementing a resitive current source within Wave Digital Filter connection trees. It should be used as a leaf/terminating element of the connection tree. It is comprised of an ideal current source in parallel with a resistor. Can be used for either DC (constant) or AC (signal) current sources.","title":"(wd.)resCurrent"},{"location":"libs/wdmodels/#usage_8","text":"i1(i) = resCurrent(i, R, jin); buildtree( A : i1 ); Where: i : index used by model-building functions. Should never be user declared. R : Resistance/Impedence of the parallel resistor in Ohms jin : Current through the ideal current source in Amps Note: The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wdmodels/#reference_8","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.5","title":"Reference"},{"location":"libs/wdmodels/#wdu_rescurrent","text":"Resistive Current Source (Uadapted). An unadapted adaptor implementing a resitive current source within Wave Digital Filter connection trees. It should be used as the root/top element of the connection tree It is comprised of an ideal current source in parallel with a resistor Can be used for either DC (constant) or AC (signal) current sources.","title":"(wd.)u_resCurrent"},{"location":"libs/wdmodels/#usage_9","text":"i1(i) = u_resCurrent(i, R, jin); buildtree( i1 : B ); Where: i : index used by model-building functions. Should never be user declared. R : Resistance/Impedence of the series resistor in Ohms jin : Current through the ideal current source in Amps Note: Only usable as the root of a tree. The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wdmodels/#reference_9","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.5","title":"Reference"},{"location":"libs/wdmodels/#wdu_switch","text":"Ideal Switch (Unadapted). An unadapted adaptor implementing an ideal switch for Wave Digital Filter connection trees. It should be used as the root/top element of the connection tree","title":"(wd.)u_switch"},{"location":"libs/wdmodels/#usage_10","text":"s1(i) = u_resCurrent(i, lambda); buildtree( s1 : B ); Where: i : index used by model-building functions. Should never be user declared. lambda : switch state control. -1 for closed switch, 1 for open switch. Note: Only usable as the root of a tree The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wdmodels/#reference_10","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.8","title":"Reference"},{"location":"libs/wdmodels/#reactive-one-port-adaptors","text":"","title":"Reactive One Port Adaptors"},{"location":"libs/wdmodels/#wdcapacitor","text":"Capacitor. A basic adaptor implementing a capacitor for use within Wave Digital Filter connection trees. It should be used as a leaf/terminating element of the connection tree. This capacitor model was digitized using the bi-linear transform.","title":"(wd.)capacitor"},{"location":"libs/wdmodels/#usage_11","text":"c1(i) = capacitor(i, R); buildtree( A : c1 ) : _; Where: i : index used by model-building functions. Should never be user declared. R : Capacitance/Impedence of the capacitor being modeled in Farads. Note: The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wdmodels/#reference_11","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.3.1","title":"Reference"},{"location":"libs/wdmodels/#wdcapacitor_output","text":"Capacitor + voltage out. A basic adaptor implementing a capacitor for use within Wave Digital Filter connection trees. It should be used as a leaf/terminating element of the connection tree. The capacitor will also pass the voltage across itself as an output of the model. This capacitor model was digitized using the bi-linear transform.","title":"(wd.)capacitor_output"},{"location":"libs/wdmodels/#usage_12","text":"cout(i) = capacitor_output(i, R); buildtree( A : cout ) : _; Where: i : index used by model-building functions. Should never be user declared R : Capacitance/Impedence of the capacitor being modeled in Farads Note: The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wdmodels/#reference_12","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.3.1","title":"Reference"},{"location":"libs/wdmodels/#wdinductor","text":"Inductor. A basic adaptor implementing an inductor for use within Wave Digital Filter connection trees. It should be used as a leaf/terminating element of the connection tree. This inductor model was digitized using the bi-linear transform.","title":"(wd.)inductor"},{"location":"libs/wdmodels/#usage_13","text":"l1(i) = inductor(i, R); buildtree( A : l1 ); Where: i : index used by model-building functions. Should never be user declared R : Inductance/Impedence of the inductor being modeled in Henries Note: The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wdmodels/#reference_13","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.3.2","title":"Reference"},{"location":"libs/wdmodels/#wdinductor_output","text":"Inductor + Voltage out. A basic adaptor implementing an inductor for use within Wave Digital Filter connection trees. It should be used as a leaf/terminating element of the connection tree. The inductor will also pass the voltage across itself as an output of the model. This inductor model was digitized using the bi-linear transform.","title":"(wd.)inductor_output"},{"location":"libs/wdmodels/#usage_14","text":"lout(i) = inductor_output(i, R); buildtree( A : lout ) : _; Where: i : index used by model-building functions. Should never be user declared R : Inductance/Impedence of the inductor being modeled in Henries Note: The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wdmodels/#reference_14","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.3.2","title":"Reference"},{"location":"libs/wdmodels/#nonlinear-one-port-adaptors","text":"","title":"Nonlinear One Port Adaptors"},{"location":"libs/wdmodels/#wdu_idealdiode","text":"Ideal Diode (Unadapted). An unadapted adaptor implementing an ideal diode for Wave Digital Filter connection trees. It should be used as the root/top element of the connection tree.","title":"(wd.)u_idealDiode"},{"location":"libs/wdmodels/#usage_15","text":"buildtree( u_idealDiode : B ); Note: Only usable as the root of a tree Correct implementation is shown above.","title":"Usage"},{"location":"libs/wdmodels/#reference_15","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 3.2.3","title":"Reference"},{"location":"libs/wdmodels/#wdu_chua","text":"Chua Diode (Unadapted). An adaptor implementing the chua diode / non-linear resistor within Wave Digital Filter connection trees. It should be used as the root/top element of the connection tree.","title":"(wd.)u_chua"},{"location":"libs/wdmodels/#usage_16","text":"chua1(i) = u_chua(i, G1, G2, V0); buildtree( chua1 : B ); Where: i : index used by model-building functions. Should never be user declared G1 : resistance parameter 1 of the chua diode G2 : resistance parameter 2 of the chua diode V0 : voltage parameter of the chua diode Note: Only usable as the root of a tree. The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wdmodels/#reference_16","text":"Meerkotter and Scholz, \"Digital Simulation of Nonlinear Circuits by Wave Digital Filter Principles\"","title":"Reference"},{"location":"libs/wdmodels/#wdlambert","text":"An implementation of the lambert function. It uses Halley's method of iteration to aproximate the output. Included in the WD library for use in non-linear diode models. Adapted from K M Brigg's c++ lambert function approximator.","title":"(wd.)lambert"},{"location":"libs/wdmodels/#usage_17","text":"lambert(n, itr) : _; Where: * n : value at which the lambert function will be evaluated * itr : number of iterations before output","title":"Usage"},{"location":"libs/wdmodels/#wdu_diodepair","text":"A pair of diodes facing in opposite directions. An unadapted adaptor implementing two antiparallel diodes for Wave Digital Filter connection trees. The behavior is approximated using Schottkey's ideal diode law.","title":"(wd.)u_diodePair"},{"location":"libs/wdmodels/#usage_18","text":"d1 = u_diodePair(i, Is, Vt); buildtree( d1 : B ); Where: i : index used by model-building functions. Should never be user declared Is : saturation current of the diodes Vt : thermal resistances of the diodes Note: Only usable as the root of a tree. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wdmodels/#reference_17","text":"K. Werner et al. \"An Improved and Generalized Diode Clipper Model for Wave Digital Filters\"","title":"Reference"},{"location":"libs/wdmodels/#wdu_diodesingle","text":"A single diode. An unadapted adaptor implementing a single diode for Wave Digital Filter connection trees. The behavior is approximated using Schottkey's ideal diode law.","title":"(wd.)u_diodeSingle"},{"location":"libs/wdmodels/#usage_19","text":"d1 = u_diodeSingle(i, Is, Vt); buildtree( d1 : B ); Where: i : index used by model-building functions. Should never be user declared Is : saturation current of the diodes Vt : thermal resistances of the diodes Note: Only usable as the root of a tree Correct implementation is shown above.","title":"Usage"},{"location":"libs/wdmodels/#reference_18","text":"K. Werner et al. \"An Improved and Generalized Diode Clipper Model for Wave Digital Filters\"","title":"Reference"},{"location":"libs/wdmodels/#wdu_diodeantiparallel","text":"A set of antiparallel diodes with M diodes facing forwards and N diodes facing backwards. An unadapted adaptor implementing antiparallel diodes for Wave Digital Filter connection trees. The behavior is approximated using Schottkey's ideal diode law.","title":"(wd.)u_diodeAntiparallel"},{"location":"libs/wdmodels/#usage_20","text":"d1 = u_diodeAntiparallel(i, Is, Vt); buildtree( d1 : B ); Where: i : index used by model-building functions. Should never be user declared Is : saturation current of the diodes Vt : thermal resistances of the diodes Note: Only usable as the root of a tree Correct implementation is shown above.","title":"Usage"},{"location":"libs/wdmodels/#reference_19","text":"K. Werner et al. \"An Improved and Generalized Diode Clipper Model for Wave Digital Filters\"","title":"Reference"},{"location":"libs/wdmodels/#two-port-adaptors","text":"","title":"Two Port Adaptors"},{"location":"libs/wdmodels/#wdu_parallel_2","text":"2-port parallel adaptor (Unadapted). An unadapted adaptor implementing a 2-port parallel connection between adaptors for Wave Digital Filter connection trees. Elements connected to this adaptor will behave as if connected in parallel in circuit.","title":"(wd.)u_parallel_2"},{"location":"libs/wdmodels/#usage_21","text":"buildtree( u_parallel_2 : (A, B) ); Note: Only usable as the root of a tree. This adaptor has no user-accessible parameters. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wdmodels/#reference_20","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.4.1","title":"Reference"},{"location":"libs/wdmodels/#wdparallel_2","text":"2-port parallel adaptor. An adaptor implementing a 2-port parallel connection between adaptors for Wave Digital Filter connection trees. Elements connected to this adaptor will behave as if connected in parallel in circuit.","title":"(wd.)parallel_2"},{"location":"libs/wdmodels/#usage_22","text":"buildtree( A : parallel_2 : B ); Note: This adaptor has no user-accessible parameters. It should be used within the connection tree with one previous and one forward adaptor. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wdmodels/#reference_21","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.4.1","title":"Reference"},{"location":"libs/wdmodels/#wdu_series_2","text":"2-port series adaptor (Unadapted). An unadapted adaptor implementing a 2-port series connection between adaptors for Wave Digital Filter connection trees. Elements connected to this adaptor will behave as if connected in series in circuit.","title":"(wd.)u_series_2"},{"location":"libs/wdmodels/#usage_23","text":"buildtree( u_series_2 : (A, B) ); Note: Only usable as the root of a tree. This adaptor has no user-accessible parameters. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wdmodels/#reference_22","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.4.1","title":"Reference"},{"location":"libs/wdmodels/#wdseries_2","text":"2-port series adaptor. An adaptor implementing a 2-port series connection between adaptors for Wave Digital Filter connection trees. Elements connected to this adaptor will behave as if connected in series in circuit.","title":"(wd.)series_2"},{"location":"libs/wdmodels/#usage_24","text":"buildtree( A : series_2 : B ); Note: This adaptor has no user-accessible parameters. It should be used within the connection tree with one previous and one forward adaptor. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wdmodels/#reference_23","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.4.1","title":"Reference"},{"location":"libs/wdmodels/#wdparallel_current","text":"2-port parallel adaptor + ideal current source. An adaptor implementing a 2-port series connection and internal idealized current source between adaptors for Wave Digital Filter connection trees. This adaptor connects the two connected elements and an additional ideal current source in parallel.","title":"(wd.)parallel_current"},{"location":"libs/wdmodels/#usage_25","text":"i1 = parallel_current(i, jin); buildtree(A : i1 : B); Where: i : index used by model-building functions. Should never be user declared jin : Current through the ideal current source in Amps Note: The adaptor must be declared as a seperate function before integration into the connection tree. It should be used within a connection tree with one previous and one forward adaptor. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wdmodels/#reference_24","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.4.2","title":"Reference"},{"location":"libs/wdmodels/#wdseries_voltage","text":"2-port series adaptor + ideal voltage source. An adaptor implementing a 2-port series connection and internal ideal voltage source between adaptors for Wave Digital Filter connection trees. This adaptor connects the two connected adaptors and an additional ideal voltage source in series.","title":"(wd.)series_voltage"},{"location":"libs/wdmodels/#usage_26","text":"v1 = series_voltage(i, vin) buildtree( A : v1 : B ); Where: i : index used by model-building functions. Should never be user declared vin : voltage across the ideal current source in Volts Note: The adaptor must be declared as a seperate function before integration into the connection tree. It should be used within the connection tree with one previous and one forward adaptor.","title":"Usage"},{"location":"libs/wdmodels/#reference_25","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.4.2","title":"Reference"},{"location":"libs/wdmodels/#three-port-adaptors","text":"","title":"Three Port Adaptors"},{"location":"libs/wdmodels/#wdparallel","text":"3-port parallel adaptor. An adaptor implementing a 3-port parallel connection between adaptors for Wave Digital Filter connection trees. This adaptor is used to connect adaptors simulating components connected in parallel in the circuit.","title":"(wd.)parallel"},{"location":"libs/wdmodels/#usage_27","text":"buildtree( A : parallel : (B, C) ); Note: This adaptor has no user-accessible parameters. It should be used within the connection tree with one previous and two forward adaptors.","title":"Usage"},{"location":"libs/wdmodels/#reference_26","text":"K. Werner Dissertation, 1.5.1","title":"Reference"},{"location":"libs/wdmodels/#wdseries","text":"3-port series adaptor. An adaptor implementing a 3-port series connection between adaptors for Wave Digital Filter connection trees. This adaptor is used to connect adaptors simulating components connected in series in the circuit.","title":"(wd.)series"},{"location":"libs/wdmodels/#usage_28","text":"tree = A : (series : (B, C)); Note: This adaptor has no user-accessible parameters. It should be used within the connection tree with one previous and two forward adaptors.","title":"Usage"},{"location":"libs/wdmodels/#reference_27","text":"K. Werner Dissertation, 1.5.2","title":"Reference"},{"location":"libs/wdmodels/#model-building-functions","text":"","title":"Model Building Functions"},{"location":"libs/wdmodels/#wdbuilddown","text":"Function for building the strucutre for calculating waves travling down the WD connection tree. It recursively steps through the given tree, parametrizes the adaptors, and builds an algorithm. It is used in conjunction with the buildup() function to create a full structure.","title":"(wd.)builddown"},{"location":"libs/wdmodels/#usage_29","text":"builddown(A : B)~buildup(A : B); Where: * (A : B) : is a connection tree composed of WD adaptors","title":"Usage"},{"location":"libs/wdmodels/#wdbuildup","text":"Function for building the strucutre for calculating waves travling up the WD connection tree. It recursively steps through the given tree, parametrizes the adaptors, and builds an algorithm. It is used in conjunction with the builddown() function to create a full structure.","title":"(wd.)buildup"},{"location":"libs/wdmodels/#usage_30","text":"builddown(A : B)~buildup(A : B); Where: * (A : B) : is a connection tree composed of WD adaptors","title":"Usage"},{"location":"libs/wdmodels/#wdgetres","text":"Function for determining the upward-facing port resistance of a partial WD connection tree. It recursively steps through the given tree, parametrizes the adaptors, and builds and algorithm. It is used by the buildup and builddown functions but is also helpful in testing.","title":"(wd.)getres"},{"location":"libs/wdmodels/#usage_31","text":"getres(A : B)~getres(A : B); Where: * (A : B) : is a partial connection tree composed of WD adaptors Note: This function cannot be used on a complete WD tree. When called on an unadapted adaptor (u_ prefix), it will create errors","title":"Usage"},{"location":"libs/wdmodels/#wdparres","text":"Function for determining the upward-facing port resistance of a partial WD connection tree. It recursively steps through the given tree, parametrizes the adaptors, and builds and algorithm. It is used by the buildup and builddown functions but is also helpful in testing. This function is a parallelized version of getres.","title":"(wd.)parres"},{"location":"libs/wdmodels/#usage_32","text":"parres((A , B))~parres((A , B)); Where: * (A , B) : is a partial connection tree composed of WD adaptors Note: This function cannot be used on a complete WD tree. When called on an unadapted adaptor (u_ prefix), it will create errors","title":"Usage"},{"location":"libs/wdmodels/#wdbuildout","text":"Function for creating the output matrix for a WD connection tree. It recursively steps through the given tree and creates an output matrix passing only outputs.","title":"(wd.)buildout"},{"location":"libs/wdmodels/#usage_33","text":"buildout( A : B ); Where: * (A : B) : is a connection tree composed of WD adaptors","title":"Usage"},{"location":"libs/wdmodels/#wdbuildtree","text":"Function for building the functioning DSP model from a WD connection tree. It recursively steps through the given tree, parametrizes the adaptors, and builds the algorithm.","title":"(wd.)buildtree"},{"location":"libs/wdmodels/#usage_34","text":"buildtree(A : B); Where: * (A : B) : a connection tree composed of WD adaptors","title":"Usage"},{"location":"libs/webaudio/","text":"webaudio.lib This library implement WebAudio filters, using their C++ version as a starting point, taken from Mozilla Firefox implementation. (wa.)lowpass2 Standard second-order resonant lowpass filter with 12dB/octave rolloff. Frequencies below the cutoff pass through, frequencies above it are attenuated. Usage _: lowpass2(f0, Q, dtune) :_ Where: f0 : cutoff frequency in Hz Q : the quality factor dtune : detuning of the frequency in cents Reference https://searchfox.org/mozilla-central/source/dom/media/webaudio/blink/Biquad.cpp#98 (wa.)highpass2 Standard second-order resonant highpass filter with 12dB/octave rolloff. Frequencies below the cutoff are attenuated, frequencies above it pass through. Usage _: highpass2(f0, Q, dtune) :_ Where: f0 : cutoff frequency in Hz Q : the quality factor dtune : detuning of the frequency in cents Reference https://searchfox.org/mozilla-central/source/dom/media/webaudio/blink/Biquad.cpp#127 (wa.)bandpass2 Standard second-order bandpass filter. Frequencies outside the given range of frequencies are attenuated, the frequencies inside it pass through. Usage _: bandpass2(f0, Q, dtune) :_ Where: f0 : cutoff frequency in Hz Q : the quality factor dtune : detuning of the frequency in cents Reference https://searchfox.org/mozilla-central/source/dom/media/webaudio/blink/Biquad.cpp#334 (wa.)notch2 Standard notch filter, also called a band-stop or band-rejection filter. It is the opposite of a bandpass filter: frequencies outside the give range of frequencies pass through, frequencies inside it are attenuated. Usage _: notch2(f0, Q, dtune) :_ Where: f0 : cutoff frequency in Hz Q : the quality factor dtune : detuning of the frequency in cents Reference https://searchfox.org/mozilla-central/source/dom/media/webaudio/blink/Biquad.cpp#301 (wa.)allpass2 Standard second-order allpass filter. It lets all frequencies through, but changes the phase-relationship between the various frequencies. Usage _: allpass2(f0, Q, dtune) :_ Where: f0 : cutoff frequency in Hz Q : the quality factor dtune : detuning of the frequency in cents Reference https://searchfox.org/mozilla-central/source/dom/media/webaudio/blink/Biquad.cpp#268 (wa.)peaking2 Frequencies inside the range get a boost or an attenuation, frequencies outside it are unchanged. Usage _: peaking2(f0, gain, Q, dtune) :_ Where: f0 : cutoff frequency in Hz gain : the gain in dB Q : the quality factor dtune : detuning of the frequency in cents Reference https://searchfox.org/mozilla-central/source/dom/media/webaudio/blink/Biquad.cpp#233 (wa.)lowshelf2 Standard second-order lowshelf filter. Frequencies lower than the frequency get a boost, or an attenuation, frequencies over it are unchanged. _: lowshelf2(f0, gain, dtune) :_ Where: f0 : cutoff frequency in Hz gain : the gain in dB dtune : detuning of the frequency in cents Reference https://searchfox.org/mozilla-central/source/dom/media/webaudio/blink/Biquad.cpp#169 (wa.)highshelf2 Standard second-order highshelf filter. Frequencies higher than the frequency get a boost or an attenuation, frequencies lower than it are unchanged. _: highshelf2(f0, gain, dtune) :_ Where: f0 : cutoff frequency in Hz gain : the gain in dB dtune : detuning of the frequency in cents Reference https://searchfox.org/mozilla-central/source/dom/media/webaudio/blink/Biquad.cpp#201","title":" webaudio "},{"location":"libs/webaudio/#webaudiolib","text":"This library implement WebAudio filters, using their C++ version as a starting point, taken from Mozilla Firefox implementation.","title":"webaudio.lib"},{"location":"libs/webaudio/#walowpass2","text":"Standard second-order resonant lowpass filter with 12dB/octave rolloff. Frequencies below the cutoff pass through, frequencies above it are attenuated.","title":"(wa.)lowpass2"},{"location":"libs/webaudio/#usage","text":"_: lowpass2(f0, Q, dtune) :_ Where: f0 : cutoff frequency in Hz Q : the quality factor dtune : detuning of the frequency in cents","title":"Usage"},{"location":"libs/webaudio/#reference","text":"https://searchfox.org/mozilla-central/source/dom/media/webaudio/blink/Biquad.cpp#98","title":"Reference"},{"location":"libs/webaudio/#wahighpass2","text":"Standard second-order resonant highpass filter with 12dB/octave rolloff. Frequencies below the cutoff are attenuated, frequencies above it pass through.","title":"(wa.)highpass2"},{"location":"libs/webaudio/#usage_1","text":"_: highpass2(f0, Q, dtune) :_ Where: f0 : cutoff frequency in Hz Q : the quality factor dtune : detuning of the frequency in cents","title":"Usage"},{"location":"libs/webaudio/#reference_1","text":"https://searchfox.org/mozilla-central/source/dom/media/webaudio/blink/Biquad.cpp#127","title":"Reference"},{"location":"libs/webaudio/#wabandpass2","text":"Standard second-order bandpass filter. Frequencies outside the given range of frequencies are attenuated, the frequencies inside it pass through.","title":"(wa.)bandpass2"},{"location":"libs/webaudio/#usage_2","text":"_: bandpass2(f0, Q, dtune) :_ Where: f0 : cutoff frequency in Hz Q : the quality factor dtune : detuning of the frequency in cents","title":"Usage"},{"location":"libs/webaudio/#reference_2","text":"https://searchfox.org/mozilla-central/source/dom/media/webaudio/blink/Biquad.cpp#334","title":"Reference"},{"location":"libs/webaudio/#wanotch2","text":"Standard notch filter, also called a band-stop or band-rejection filter. It is the opposite of a bandpass filter: frequencies outside the give range of frequencies pass through, frequencies inside it are attenuated.","title":"(wa.)notch2"},{"location":"libs/webaudio/#usage_3","text":"_: notch2(f0, Q, dtune) :_ Where: f0 : cutoff frequency in Hz Q : the quality factor dtune : detuning of the frequency in cents","title":"Usage"},{"location":"libs/webaudio/#reference_3","text":"https://searchfox.org/mozilla-central/source/dom/media/webaudio/blink/Biquad.cpp#301","title":"Reference"},{"location":"libs/webaudio/#waallpass2","text":"Standard second-order allpass filter. It lets all frequencies through, but changes the phase-relationship between the various frequencies.","title":"(wa.)allpass2"},{"location":"libs/webaudio/#usage_4","text":"_: allpass2(f0, Q, dtune) :_ Where: f0 : cutoff frequency in Hz Q : the quality factor dtune : detuning of the frequency in cents","title":"Usage"},{"location":"libs/webaudio/#reference_4","text":"https://searchfox.org/mozilla-central/source/dom/media/webaudio/blink/Biquad.cpp#268","title":"Reference"},{"location":"libs/webaudio/#wapeaking2","text":"Frequencies inside the range get a boost or an attenuation, frequencies outside it are unchanged.","title":"(wa.)peaking2"},{"location":"libs/webaudio/#usage_5","text":"_: peaking2(f0, gain, Q, dtune) :_ Where: f0 : cutoff frequency in Hz gain : the gain in dB Q : the quality factor dtune : detuning of the frequency in cents","title":"Usage"},{"location":"libs/webaudio/#reference_5","text":"https://searchfox.org/mozilla-central/source/dom/media/webaudio/blink/Biquad.cpp#233","title":"Reference"},{"location":"libs/webaudio/#walowshelf2","text":"Standard second-order lowshelf filter. Frequencies lower than the frequency get a boost, or an attenuation, frequencies over it are unchanged. _: lowshelf2(f0, gain, dtune) :_ Where: f0 : cutoff frequency in Hz gain : the gain in dB dtune : detuning of the frequency in cents","title":"(wa.)lowshelf2"},{"location":"libs/webaudio/#reference_6","text":"https://searchfox.org/mozilla-central/source/dom/media/webaudio/blink/Biquad.cpp#169","title":"Reference"},{"location":"libs/webaudio/#wahighshelf2","text":"Standard second-order highshelf filter. Frequencies higher than the frequency get a boost or an attenuation, frequencies lower than it are unchanged. _: highshelf2(f0, gain, dtune) :_ Where: f0 : cutoff frequency in Hz gain : the gain in dB dtune : detuning of the frequency in cents","title":"(wa.)highshelf2"},{"location":"libs/webaudio/#reference_7","text":"https://searchfox.org/mozilla-central/source/dom/media/webaudio/blink/Biquad.cpp#201","title":"Reference"}]}
\ No newline at end of file
+{"config":{"lang":["en"],"min_search_length":3,"prebuild_index":false,"separator":"[\\s\\-]+"},"docs":[{"location":"","text":"Faust Libraries The Faust libraries implement hundreds of DSP functions for audio processing and synthesis. They are organized by types in a set of .lib files (e.g., envelopes.lib , filters.lib , etc.). This website serves as the main documentation of the Faust libraries. The main Faust website can be found at the following URL: https://faust.grame.fr Using the Faust Libraries The easiest and most standard way to use the Faust libraries is to import stdfaust.lib in your Faust code: import(\"stdfaust.lib\"); This will give you access to all the Faust libraries through a series of environments: sf : all.lib an : analyzers.lib ba : basics.lib co : compressors.lib de : delays.lib dm : demos.lib dx : dx7.lib en : envelopes.lib fd : fds.lib fi : filters.lib ho : hoa.lib it : interpolators.lib ma : maths.lib mi : mi.lib ef : misceffects.lib os : oscillators.lib no : noises.lib pf : phaflangers.lib pm : physmodels.lib rm : reducemaps.lib re : reverbs.lib ro : routes.lib si : signals.lib so : soundfiles.lib sp : spats.lib sy : synths.lib ve : vaeffects.lib wa : webaudio.lib wd : wavedigitalfilters.lib vl : version.lib Environments can then be used as follows in your Faust code: import(\"stdfaust.lib\"); process = os.osc(440); In this case, we're calling the osc function from oscillators.lib . You can also access all the functions of all the libraries directly using the sf environment: import(\"stdfaust.lib\"); process = sf.osc(440); Alternatively, environments can be created by hand: os = library(\"oscillators.lib\"); process = os.osc(440); Finally, libraries can be simply imported in the Faust code (not recommended): import(\"oscillators.lib\"); process = osc(440); Organization of This Documentation The Overview tab in the upper menu provides additional information about the general organization of the libraries, licensing/copyright, and guidelines on how to contribute to the Faust libraries. The Libraries tab contain the actual documentation of the Faust libraries.","title":"Faust Libraries"},{"location":"#faust-libraries","text":"The Faust libraries implement hundreds of DSP functions for audio processing and synthesis. They are organized by types in a set of .lib files (e.g., envelopes.lib , filters.lib , etc.). This website serves as the main documentation of the Faust libraries. The main Faust website can be found at the following URL: https://faust.grame.fr","title":"Faust Libraries"},{"location":"#using-the-faust-libraries","text":"The easiest and most standard way to use the Faust libraries is to import stdfaust.lib in your Faust code: import(\"stdfaust.lib\"); This will give you access to all the Faust libraries through a series of environments: sf : all.lib an : analyzers.lib ba : basics.lib co : compressors.lib de : delays.lib dm : demos.lib dx : dx7.lib en : envelopes.lib fd : fds.lib fi : filters.lib ho : hoa.lib it : interpolators.lib ma : maths.lib mi : mi.lib ef : misceffects.lib os : oscillators.lib no : noises.lib pf : phaflangers.lib pm : physmodels.lib rm : reducemaps.lib re : reverbs.lib ro : routes.lib si : signals.lib so : soundfiles.lib sp : spats.lib sy : synths.lib ve : vaeffects.lib wa : webaudio.lib wd : wavedigitalfilters.lib vl : version.lib Environments can then be used as follows in your Faust code: import(\"stdfaust.lib\"); process = os.osc(440); In this case, we're calling the osc function from oscillators.lib . You can also access all the functions of all the libraries directly using the sf environment: import(\"stdfaust.lib\"); process = sf.osc(440); Alternatively, environments can be created by hand: os = library(\"oscillators.lib\"); process = os.osc(440); Finally, libraries can be simply imported in the Faust code (not recommended): import(\"oscillators.lib\"); process = osc(440);","title":"Using the Faust Libraries"},{"location":"#organization-of-this-documentation","text":"The Overview tab in the upper menu provides additional information about the general organization of the libraries, licensing/copyright, and guidelines on how to contribute to the Faust libraries. The Libraries tab contain the actual documentation of the Faust libraries.","title":"Organization of This Documentation"},{"location":"about/","text":"The Faust Project The Faust Project has started in 2002. It is actively developed by the Grame Research Lab . Many persons are contributing to the Faust project, by providing code for the compiler, architecture files, libraries, examples, documentation, scripts, bug reports, ideas, etc. We would like in particular to thank: Fons Adriaensen, Karim Barkati, J\u00e9r\u00f4me Barth\u00e9lemy, Tim Blechmann, Tiziano Bole, Alain Bonardi, Thomas Charbonnel, Raffaele Ciavarella, Julien Colafrancesco, Damien Cramet, Sarah Denoux, \u00c9tienne Gaudrin, Olivier Guillerminet, Pierre Guillot, Albert Gr\u00e4f, Pierre Jouvelot, Stefan Kersten, Victor Lazzarini, Matthieu Leberre, Mathieu Leroi, Fernando Lopez-Lezcano, Kjetil Matheussen, Hermann Meyer, R\u00e9my Muller, Raphael Panis, Eliott Paris, Reza Payami, Laurent Pottier, Sampo Savolainen, Nicolas Scaringella, Anne Sedes, Priyanka Shekar, Stephen Sinclair, Travis Skare, Julius Smith, Mike Solomon, Michael Wilson, Bart Brouns, Dirk Roosenburg, Riccardo Russo. as well as our colleagues at GRAME : Dominique Fober Christophe Lebreton St\u00e9phane Letz Romain Michon Yann Orlarey We would like also to thank for their financial support: the French Ministry of Culture , the Auvergne-Rh\u00f4ne-Alpes Region , the City of Lyon , the French National Research Agency (ANR) .","title":"About"},{"location":"about/#the-faust-project","text":"The Faust Project has started in 2002. It is actively developed by the Grame Research Lab . Many persons are contributing to the Faust project, by providing code for the compiler, architecture files, libraries, examples, documentation, scripts, bug reports, ideas, etc. We would like in particular to thank: Fons Adriaensen, Karim Barkati, J\u00e9r\u00f4me Barth\u00e9lemy, Tim Blechmann, Tiziano Bole, Alain Bonardi, Thomas Charbonnel, Raffaele Ciavarella, Julien Colafrancesco, Damien Cramet, Sarah Denoux, \u00c9tienne Gaudrin, Olivier Guillerminet, Pierre Guillot, Albert Gr\u00e4f, Pierre Jouvelot, Stefan Kersten, Victor Lazzarini, Matthieu Leberre, Mathieu Leroi, Fernando Lopez-Lezcano, Kjetil Matheussen, Hermann Meyer, R\u00e9my Muller, Raphael Panis, Eliott Paris, Reza Payami, Laurent Pottier, Sampo Savolainen, Nicolas Scaringella, Anne Sedes, Priyanka Shekar, Stephen Sinclair, Travis Skare, Julius Smith, Mike Solomon, Michael Wilson, Bart Brouns, Dirk Roosenburg, Riccardo Russo. as well as our colleagues at GRAME : Dominique Fober Christophe Lebreton St\u00e9phane Letz Romain Michon Yann Orlarey We would like also to thank for their financial support: the French Ministry of Culture , the Auvergne-Rh\u00f4ne-Alpes Region , the City of Lyon , the French National Research Agency (ANR) .","title":"The Faust Project"},{"location":"contributing/","text":"Contributing In general, libraries are organised in a stacked manner : the base ones define functions or constants without any dependancies, and additional ones are gradually built on top of simpler ones, layer by layer. Dependency loops must be avoided as much as possible . The resources folder contains tools to build and visualise the libraries dependencies graphs. If you wish to add a function to any of these libraries or if you plan to add a new library, make sure that you follow the following conventions: New Functions All functions must be preceded by a markdown documentation header respecting the following format (open the source code of any of the libraries for an example): //-----------------functionName-------------------- // Description // // #### Usage // // ``` // Usage Example // ``` // // Where: // // * argument1: argument 1 description //------------------------------------------------- Every time a new function is added, the documentation should be updated simply by running make doclib . The environment system (e.g. os.osc ) should be used when calling a function declared in another library (see the section on Using the Faust Libraries ). Try to reuse existing functions as much as possible. If you have any question, send an e-mail to rmichon_at_ccrma_dot_stanford_dot_edu. New Libraries Any new \"standard\" library should be declared in stdfaust.lib with its own environment (2 letters - see stdfaust.lib ). Any new \"standard\" library must be added to generateDoc . Functions must be organized by sections. Any new library should at least declare a name and a version . The comment based markdown documentation of each library must respect the following format (open the source code of any of the libraries for an example): //############### libraryName ################## // Description // // * Section Name 1 // * Section Name 2 // * ... // // It should be used using the `[...]` environment: // // ``` // [...] = library(\"libraryName\"); // process = [...].functionCall; // ``` // // Another option is to import `stdfaust.lib` which already contains the `[...]` // environment: // // ``` // import(\"stdfaust.lib\"); // process = [...].functionCall; // ``` //############################################## //================= Section Name =============== // Description //============================================== If you have any question, send an e-mail to rmichon_at_ccrma_dot_stanford_dot_edu. Coding Conventions In order to have a uniformized library system, we established the following conventions (that hopefully will be followed by others when making modifications to them :-) ). Documentation All the functions that we want to be \"public\" are documented. We used the faust2md \"standards\" for each library: //### for main title (library name - equivalent to # in markdown), //=== for section declarations (equivalent to ## in markdown) and //--- for function declarations (equivalent to #### in markdown - see basics.lib for an example). Sections in function documentation should be declared as #### markdown title. Each function documentation provides a \"Usage\" section (see basics.lib ). Library Import To prevent cross-references between libraries we generalized the use of the library(\"\") system for function calls in all the libraries. This means that everytime a function declared in another library is called, the environment corresponding to this library needs to be called too. To make things easier, a stdfaust.lib library was created and is imported by all the libraries: an = library(\"analyzers.lib\"); ba = library(\"basics.lib\"); co = library(\"compressors.lib\"); de = library(\"delays.lib\"); dm = library(\"demos.lib\"); dx = library(\"dx7.lib\"); en = library(\"envelopes.lib\"); fd = library(\"fds.lib\"); fi = library(\"filters.lib\"); ho = library(\"hoa.lib\"); it = library(\"interpolators.lib\"); ma = library(\"maths.lib\"); mi = library(\"mi.lib\"); ef = library(\"misceffects.lib\"); os = library(\"oscillators.lib\"); no = library(\"noises.lib\"); pf = library(\"phaflangers.lib\"); pm = library(\"physmodels.lib\"); rm = library(\"reducemaps.lib\"); re = library(\"reverbs.lib\"); ro = library(\"routes.lib\"); sp = library(\"spats.lib\"); si = library(\"signals.lib\"); so = library(\"soundfiles.lib\"); sy = library(\"synths.lib\"); ve = library(\"vaeffects.lib\"); wa = library(\"webaudio.lib\"); vl = library(\"version.lib\"); wd = library(\"wavedigitalfilters.lib\"); For example, if we wanted to use the smooth function which is now declared in signals.lib , we would do the following: import(\"stdfaust.lib\"); process = si.smooth(0.999); This standard is only used within the libraries: nothing prevents coders to still import signals.lib directly and call smooth without ro. , etc. It means symbols and function names defined within a library have to be unique to not collide with symbols of any other libraries. \"Demo\" Functions \"Demo\" functions are placed in demos.lib and have a built-in user interface (UI). Their name ends with the _demo suffix. Each of these function have a .dsp file associated to them in the /examples folder. Any function containing UI elements should be placed in this library and respect these standards. \"Standard\" Functions \"Standard\" functions are here to simplify the life of new (or not so new) Faust coders. They are declared in /libraries/doc/standardFunctions.md and allow to point programmers to preferred functions to carry out a specific task. For example, there are many different types of lowpass filters declared in filters.lib and only one of them is considered to be standard, etc.","title":" Contributing "},{"location":"contributing/#contributing","text":"In general, libraries are organised in a stacked manner : the base ones define functions or constants without any dependancies, and additional ones are gradually built on top of simpler ones, layer by layer. Dependency loops must be avoided as much as possible . The resources folder contains tools to build and visualise the libraries dependencies graphs. If you wish to add a function to any of these libraries or if you plan to add a new library, make sure that you follow the following conventions:","title":"Contributing"},{"location":"contributing/#new-functions","text":"All functions must be preceded by a markdown documentation header respecting the following format (open the source code of any of the libraries for an example): //-----------------functionName-------------------- // Description // // #### Usage // // ``` // Usage Example // ``` // // Where: // // * argument1: argument 1 description //------------------------------------------------- Every time a new function is added, the documentation should be updated simply by running make doclib . The environment system (e.g. os.osc ) should be used when calling a function declared in another library (see the section on Using the Faust Libraries ). Try to reuse existing functions as much as possible. If you have any question, send an e-mail to rmichon_at_ccrma_dot_stanford_dot_edu.","title":"New Functions"},{"location":"contributing/#new-libraries","text":"Any new \"standard\" library should be declared in stdfaust.lib with its own environment (2 letters - see stdfaust.lib ). Any new \"standard\" library must be added to generateDoc . Functions must be organized by sections. Any new library should at least declare a name and a version . The comment based markdown documentation of each library must respect the following format (open the source code of any of the libraries for an example): //############### libraryName ################## // Description // // * Section Name 1 // * Section Name 2 // * ... // // It should be used using the `[...]` environment: // // ``` // [...] = library(\"libraryName\"); // process = [...].functionCall; // ``` // // Another option is to import `stdfaust.lib` which already contains the `[...]` // environment: // // ``` // import(\"stdfaust.lib\"); // process = [...].functionCall; // ``` //############################################## //================= Section Name =============== // Description //============================================== If you have any question, send an e-mail to rmichon_at_ccrma_dot_stanford_dot_edu.","title":"New Libraries"},{"location":"contributing/#coding-conventions","text":"In order to have a uniformized library system, we established the following conventions (that hopefully will be followed by others when making modifications to them :-) ).","title":"Coding Conventions"},{"location":"contributing/#documentation","text":"All the functions that we want to be \"public\" are documented. We used the faust2md \"standards\" for each library: //### for main title (library name - equivalent to # in markdown), //=== for section declarations (equivalent to ## in markdown) and //--- for function declarations (equivalent to #### in markdown - see basics.lib for an example). Sections in function documentation should be declared as #### markdown title. Each function documentation provides a \"Usage\" section (see basics.lib ).","title":"Documentation"},{"location":"contributing/#library-import","text":"To prevent cross-references between libraries we generalized the use of the library(\"\") system for function calls in all the libraries. This means that everytime a function declared in another library is called, the environment corresponding to this library needs to be called too. To make things easier, a stdfaust.lib library was created and is imported by all the libraries: an = library(\"analyzers.lib\"); ba = library(\"basics.lib\"); co = library(\"compressors.lib\"); de = library(\"delays.lib\"); dm = library(\"demos.lib\"); dx = library(\"dx7.lib\"); en = library(\"envelopes.lib\"); fd = library(\"fds.lib\"); fi = library(\"filters.lib\"); ho = library(\"hoa.lib\"); it = library(\"interpolators.lib\"); ma = library(\"maths.lib\"); mi = library(\"mi.lib\"); ef = library(\"misceffects.lib\"); os = library(\"oscillators.lib\"); no = library(\"noises.lib\"); pf = library(\"phaflangers.lib\"); pm = library(\"physmodels.lib\"); rm = library(\"reducemaps.lib\"); re = library(\"reverbs.lib\"); ro = library(\"routes.lib\"); sp = library(\"spats.lib\"); si = library(\"signals.lib\"); so = library(\"soundfiles.lib\"); sy = library(\"synths.lib\"); ve = library(\"vaeffects.lib\"); wa = library(\"webaudio.lib\"); vl = library(\"version.lib\"); wd = library(\"wavedigitalfilters.lib\"); For example, if we wanted to use the smooth function which is now declared in signals.lib , we would do the following: import(\"stdfaust.lib\"); process = si.smooth(0.999); This standard is only used within the libraries: nothing prevents coders to still import signals.lib directly and call smooth without ro. , etc. It means symbols and function names defined within a library have to be unique to not collide with symbols of any other libraries.","title":"Library Import"},{"location":"contributing/#demo-functions","text":"\"Demo\" functions are placed in demos.lib and have a built-in user interface (UI). Their name ends with the _demo suffix. Each of these function have a .dsp file associated to them in the /examples folder. Any function containing UI elements should be placed in this library and respect these standards.","title":"\"Demo\" Functions"},{"location":"contributing/#standard-functions","text":"\"Standard\" functions are here to simplify the life of new (or not so new) Faust coders. They are declared in /libraries/doc/standardFunctions.md and allow to point programmers to preferred functions to carry out a specific task. For example, there are many different types of lowpass filters declared in filters.lib and only one of them is considered to be standard, etc.","title":"\"Standard\" Functions"},{"location":"copyright/","text":"Copyright / License Now that Faust libraries are less author specific, each function will normally have its own copyright-and-license line in the library source (the .lib file, such as analyzers.lib ). If not, see if the function is defined within a section of the .lib file stating the license in source-code comments. If not, then the copyright and license given at the beginning of the .lib file may be assumed, when present. If not, run git blame on the .lib file and ask the person who last edited the function! Note that it is presently possible for a library function released under one license to utilize another library function having some different license. There is presently no indication of this situation in the Faust compiler output, but such notice is planned. For now, library contributors should strive to use only library functions having compatible licenses, and concerned end-users must manually determine the union of licenses applicable to the library functions they are using. STK 4.3 License The Synthesis ToolKit in C++ (STK) is a set of open source audio signal processing and algorithmic synthesis classes written in the C++ programming language. STK was designed to facilitate rapid development of music synthesis and audio processing software, with an emphasis on cross-platform functionality, realtime control, ease of use, and educational example code. STK currently runs with realtime support (audio and MIDI) on Linux, Macintosh OS X, and Windows computer platforms. Generic, non-realtime support has been tested under NeXTStep, Sun, and other platforms and should work with any standard C++ compiler. STK WWW site: http://ccrma.stanford.edu/software/stk/ The Synthesis ToolKit in C++ (STK) Copyright (c) 1995--2017 Perry R. Cook and Gary P. Scavone Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. Any person wishing to distribute modifications to the Software is asked to send the modifications to the original developer so that they can be incorporated into the canonical version. For software copyrighted by Julius O. Smith III, email your modifications to jos@ccrma.stanford.edu . This is, however, not a binding provision of this license. THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. LGPL License This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.","title":" Copyright/License "},{"location":"copyright/#copyright-license","text":"Now that Faust libraries are less author specific, each function will normally have its own copyright-and-license line in the library source (the .lib file, such as analyzers.lib ). If not, see if the function is defined within a section of the .lib file stating the license in source-code comments. If not, then the copyright and license given at the beginning of the .lib file may be assumed, when present. If not, run git blame on the .lib file and ask the person who last edited the function! Note that it is presently possible for a library function released under one license to utilize another library function having some different license. There is presently no indication of this situation in the Faust compiler output, but such notice is planned. For now, library contributors should strive to use only library functions having compatible licenses, and concerned end-users must manually determine the union of licenses applicable to the library functions they are using.","title":"Copyright / License"},{"location":"copyright/#stk-43-license","text":"The Synthesis ToolKit in C++ (STK) is a set of open source audio signal processing and algorithmic synthesis classes written in the C++ programming language. STK was designed to facilitate rapid development of music synthesis and audio processing software, with an emphasis on cross-platform functionality, realtime control, ease of use, and educational example code. STK currently runs with realtime support (audio and MIDI) on Linux, Macintosh OS X, and Windows computer platforms. Generic, non-realtime support has been tested under NeXTStep, Sun, and other platforms and should work with any standard C++ compiler. STK WWW site: http://ccrma.stanford.edu/software/stk/ The Synthesis ToolKit in C++ (STK) Copyright (c) 1995--2017 Perry R. Cook and Gary P. Scavone Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. Any person wishing to distribute modifications to the Software is asked to send the modifications to the original developer so that they can be incorporated into the canonical version. For software copyrighted by Julius O. Smith III, email your modifications to jos@ccrma.stanford.edu . This is, however, not a binding provision of this license. THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.","title":"STK 4.3 License"},{"location":"copyright/#lgpl-license","text":"This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.","title":"LGPL License"},{"location":"organization/","text":"General Organization Only the libraries that are considered to be \"standard\" are documented: analyzers.lib basics.lib compressors.lib delays.lib demos.lib dx7.lib envelopes.lib fds.lib filters.lib hoa.lib interpolators.lib maths.lib mi.lib misceffects.lib oscillators.lib noises.lib phaflangers.lib physmodels.lib reducemaps.lib reverbs.lib routes.lib signals.lib soundfiles.lib spats.lib synths.lib tonestacks.lib (not documented but example in /examples/misc ) tubes.lib (not documented but example in /examples/misc ) vaeffects.lib wavedigitalfilters.lib webaudio.lib version.lib Other deprecated libraries such as music.lib , etc. are present but are not documented to not confuse new users. The documentation of each library can be found in /documentation/library.html or in /documentation/library.pdf . A global version number for the standard libraries is defined in version.lib . It follows the semantic versioning structure: MAJOR, MINOR, PATCH. The MAJOR number is increased when we make incompatible changes. The MINOR number is increased when we add functionality in a backwards compatible manner, and the PATCH number when we make backwards compatible bug fixes. By looking at the generated code or the diagram of process = vl.version; one can see the current version of the libraries. The /examples directory contains all the examples from the /examples folder of the Faust distribution as well as new ones. Most of them were updated to reflect the coding conventions described in the next section. Examples are organized by types in different folders. The /old folder contains examples that are fully deprecated, probably because they were integrated to the libraries and fully rewritten (see freeverb.dsp for example). Examples using deprecated libraries were integrated to the general tree but a warning comment was added at their beginning to point readers to the right library and function.","title":" Organization "},{"location":"organization/#general-organization","text":"Only the libraries that are considered to be \"standard\" are documented: analyzers.lib basics.lib compressors.lib delays.lib demos.lib dx7.lib envelopes.lib fds.lib filters.lib hoa.lib interpolators.lib maths.lib mi.lib misceffects.lib oscillators.lib noises.lib phaflangers.lib physmodels.lib reducemaps.lib reverbs.lib routes.lib signals.lib soundfiles.lib spats.lib synths.lib tonestacks.lib (not documented but example in /examples/misc ) tubes.lib (not documented but example in /examples/misc ) vaeffects.lib wavedigitalfilters.lib webaudio.lib version.lib Other deprecated libraries such as music.lib , etc. are present but are not documented to not confuse new users. The documentation of each library can be found in /documentation/library.html or in /documentation/library.pdf . A global version number for the standard libraries is defined in version.lib . It follows the semantic versioning structure: MAJOR, MINOR, PATCH. The MAJOR number is increased when we make incompatible changes. The MINOR number is increased when we add functionality in a backwards compatible manner, and the PATCH number when we make backwards compatible bug fixes. By looking at the generated code or the diagram of process = vl.version; one can see the current version of the libraries. The /examples directory contains all the examples from the /examples folder of the Faust distribution as well as new ones. Most of them were updated to reflect the coding conventions described in the next section. Examples are organized by types in different folders. The /old folder contains examples that are fully deprecated, probably because they were integrated to the libraries and fully rewritten (see freeverb.dsp for example). Examples using deprecated libraries were integrated to the general tree but a warning comment was added at their beginning to point readers to the right library and function.","title":"General Organization"},{"location":"standardFunctions/","text":"Standard Functions Dozens of functions are implemented in the Faust libraries and many of them are very specialized and not useful to beginners or to people who only need to use Faust for basic applications. This section offers an index organized by categories of the \"standard Faust functions\" (basic filters, effects, synthesizers, etc.). This index only contains functions without a user interface (UI). Faust functions with a built-in UI can be found in demos.lib . Analysis Tools Function Type Function Name Description Amplitude Follower an. amp_follower Classic analog audio envelope follower Octave Analyzers an. mth_octave_analyzer[N] Octave analyzers Basic Elements Function Type Function Name Description Beats ba. beat Pulses at a specific tempo Block si. block Terminate n signals Break Point Function ba. bpf Beak Point Function (BPF) Bus si. bus Bus of n signals Bypass (Mono) ba. bypass1 Mono bypass Bypass (Stereo) ba. bypass2 Stereo bypass Count Elements ba. count Count elements in a list Count Down ba. countdown Samples count down Count Up ba. countup Samples count up Delay (Integer) de. delay Integer delay Delay (Float) de. fdelay Fractional delay Down Sample ba. downSample Down sample a signal Impulsify ba. impulsify Turns a signal into an impulse Sample and Hold ba. sAndH Sample and hold Signal Crossing ro. cross Cross n signals Smoother (Default) si. smoo Exponential smoothing Smoother si. smooth Exponential smoothing with controllable pole Take Element ba. take Take en element from a list Time ba. time A simple timer Conversion Function Type Function Name Description dB to Linear ba. db2linear Converts dB to linear values Linear to dB ba. linear2db Converts linear values to dB MIDI Key to Hz ba. midikey2hz Converts a MIDI key number into a frequency Hz to MIDI Key ba. hz2midikey Converts a frequency into MIDI key number Pole to T60 ba. pole2tau Converts a pole into a time constant (t60) Samples to Seconds ba. samp2sec Converts samples to seconds Seconds to Samples ba. sec2samp Converts seconds to samples T60 to Pole ba. tau2pole Converts a time constant (t60) into a pole Effects Function Type Function Name Description Auto Wah ve. autowah Auto-Wah effect Compressor co. compressor_mono Dynamic range compressor Distortion ef. cubicnl Cubic nonlinearity distortion Crybaby ve. crybaby Crybaby wah pedal Echo ef. echo Simple echo Flanger pf. flanger_stereo Flanging effect Gate ef. gate_mono Mono signal gate Limiter co. limiter_1176_R4_mono Limiter Phaser pf. phaser2_stereo Phaser effect Reverb (FDN) re. fdnrev0 Feedback delay network reverberator Reverb (Freeverb) re. mono_freeverb Most \"famous\" Schroeder reverberator Reverb (Simple) re. jcrev Simple Schroeder reverberator Reverb (Zita) re. zita_rev1_stereo High quality FDN reverberator Panner sp. panner Linear stereo panner Pitch Shift ef. transpose Simple pitch shifter Panner sp. spat N outputs spatializer Speaker Simulator ef. speakerbp Simple speaker simulator Stereo Width ef. stereo_width Stereo width effect Vocoder ve. vocoder Simple vocoder Wah ve. wah4 Wah effect Envelope Generators Function Type Function Name Description ADSR en. adsr Attack/Decay/Sustain/Release envelope generator AR en. ar Attack/Release envelope generator ASR en. asr Attack/Sustain/Release envelope generator Exponential en. smoothEnvelope Exponential envelope generator Filters Function Type Function Name Description Bandpass (Butterworth) fi. bandpass Generic butterworth bandpass Bandpass (Resonant) fi. resonbp Virtual analog resonant bandpass Bandstop (Butterworth) fi. bandstop Generic butterworth bandstop Biquad fi. tf2 \"Standard\" biquad filter Comb (Allpass) fi. allpass_fcomb Schroeder allpass comb filter Comb (Feedback) fi. fb_fcomb Feedback comb filter Comb (Feedforward) fi. ff_fcomb Feed-forward comb filter. DC Blocker fi. dcblocker Default dc blocker Filterbank fi. filterbank Generic filter bank FIR (Arbitrary Order) fi. fir Nth-order FIR filter High Shelf fi. high_shelf High shelf Highpass (Butterworth) fi. highpass Nth-order Butterworth highpass Highpass (Resonant) fi. resonhp Virtual analog resonant highpass IIR (Arbitrary Order) fi. iir Nth-order IIR filter Level Filter fi. levelfilter Dynamic level lowpass Low Shelf fi. low_shelf Low shelf Lowpass (Butterworth) fi. lowpass Nth-order Butterworth lowpass Lowpass (Resonant) fi. resonlp Virtual analog resonant lowpass Notch Filter fi. notchw Simple notch filter Peak Equalizer fi. peak_eq Peaking equalizer section Oscillators/Sound Generators Function Type Function Name Description Impulse os. impulse Generate an impulse on start-up Impulse Train os. imptrain Band-limited impulse train Phasor os. phasor Simple phasor Pink Noise no. pink_noise Pink noise generator Pulse Train os. pulsetrain Band-limited pulse train Pulse Train (Low Frequency) os. lf_imptrain Low-frequency pulse train Sawtooth os. sawtooth Band-limited sawtooth wave Sawtooth (Low Frequency) os. lf_saw Low-frequency sawtooth wave Sine (Filter-Based) os. oscs Sine oscillator (filter-based) Sine (Table-Based) os. osc Sine oscillator (table-based) Square os. square Band-limited square wave Square (Low Frequency) os. lf_squarewave Low-frequency square wave Triangle os. triangle Band-limited triangle wave Triangle (Low Frequency) os. lf_triangle Low-frequency triangle wave White Noise no. noise White noise generator Synths Function Type Function Name Description Additive Drum sy. additiveDrum Additive synthesis drum Bandpassed Sawtooth sy. dubDub Sawtooth through resonant bandpass Comb String sy. combString String model based on a comb filter FM sy. fm Frequency modulation synthesizer Lowpassed Sawtooth sy. sawTrombone \"Trombone\" based on a filtered sawtooth Popping Filter sy. popFilterPerc Popping filter percussion instrument (function() { $('div.table-begin').nextUntil('div.table-end', 'table').addClass('table table-bordered'); })();","title":" Standard Functions "},{"location":"standardFunctions/#standard-functions","text":"Dozens of functions are implemented in the Faust libraries and many of them are very specialized and not useful to beginners or to people who only need to use Faust for basic applications. This section offers an index organized by categories of the \"standard Faust functions\" (basic filters, effects, synthesizers, etc.). This index only contains functions without a user interface (UI). Faust functions with a built-in UI can be found in demos.lib .","title":"Standard Functions"},{"location":"standardFunctions/#analysis-tools","text":"Function Type Function Name Description Amplitude Follower an. amp_follower Classic analog audio envelope follower Octave Analyzers an. mth_octave_analyzer[N] Octave analyzers","title":"Analysis Tools"},{"location":"standardFunctions/#basic-elements","text":"Function Type Function Name Description Beats ba. beat Pulses at a specific tempo Block si. block Terminate n signals Break Point Function ba. bpf Beak Point Function (BPF) Bus si. bus Bus of n signals Bypass (Mono) ba. bypass1 Mono bypass Bypass (Stereo) ba. bypass2 Stereo bypass Count Elements ba. count Count elements in a list Count Down ba. countdown Samples count down Count Up ba. countup Samples count up Delay (Integer) de. delay Integer delay Delay (Float) de. fdelay Fractional delay Down Sample ba. downSample Down sample a signal Impulsify ba. impulsify Turns a signal into an impulse Sample and Hold ba. sAndH Sample and hold Signal Crossing ro. cross Cross n signals Smoother (Default) si. smoo Exponential smoothing Smoother si. smooth Exponential smoothing with controllable pole Take Element ba. take Take en element from a list Time ba. time A simple timer","title":"Basic Elements"},{"location":"standardFunctions/#conversion","text":"Function Type Function Name Description dB to Linear ba. db2linear Converts dB to linear values Linear to dB ba. linear2db Converts linear values to dB MIDI Key to Hz ba. midikey2hz Converts a MIDI key number into a frequency Hz to MIDI Key ba. hz2midikey Converts a frequency into MIDI key number Pole to T60 ba. pole2tau Converts a pole into a time constant (t60) Samples to Seconds ba. samp2sec Converts samples to seconds Seconds to Samples ba. sec2samp Converts seconds to samples T60 to Pole ba. tau2pole Converts a time constant (t60) into a pole","title":"Conversion"},{"location":"standardFunctions/#effects","text":"Function Type Function Name Description Auto Wah ve. autowah Auto-Wah effect Compressor co. compressor_mono Dynamic range compressor Distortion ef. cubicnl Cubic nonlinearity distortion Crybaby ve. crybaby Crybaby wah pedal Echo ef. echo Simple echo Flanger pf. flanger_stereo Flanging effect Gate ef. gate_mono Mono signal gate Limiter co. limiter_1176_R4_mono Limiter Phaser pf. phaser2_stereo Phaser effect Reverb (FDN) re. fdnrev0 Feedback delay network reverberator Reverb (Freeverb) re. mono_freeverb Most \"famous\" Schroeder reverberator Reverb (Simple) re. jcrev Simple Schroeder reverberator Reverb (Zita) re. zita_rev1_stereo High quality FDN reverberator Panner sp. panner Linear stereo panner Pitch Shift ef. transpose Simple pitch shifter Panner sp. spat N outputs spatializer Speaker Simulator ef. speakerbp Simple speaker simulator Stereo Width ef. stereo_width Stereo width effect Vocoder ve. vocoder Simple vocoder Wah ve. wah4 Wah effect","title":"Effects"},{"location":"standardFunctions/#envelope-generators","text":"Function Type Function Name Description ADSR en. adsr Attack/Decay/Sustain/Release envelope generator AR en. ar Attack/Release envelope generator ASR en. asr Attack/Sustain/Release envelope generator Exponential en. smoothEnvelope Exponential envelope generator","title":"Envelope Generators"},{"location":"standardFunctions/#filters","text":"Function Type Function Name Description Bandpass (Butterworth) fi. bandpass Generic butterworth bandpass Bandpass (Resonant) fi. resonbp Virtual analog resonant bandpass Bandstop (Butterworth) fi. bandstop Generic butterworth bandstop Biquad fi. tf2 \"Standard\" biquad filter Comb (Allpass) fi. allpass_fcomb Schroeder allpass comb filter Comb (Feedback) fi. fb_fcomb Feedback comb filter Comb (Feedforward) fi. ff_fcomb Feed-forward comb filter. DC Blocker fi. dcblocker Default dc blocker Filterbank fi. filterbank Generic filter bank FIR (Arbitrary Order) fi. fir Nth-order FIR filter High Shelf fi. high_shelf High shelf Highpass (Butterworth) fi. highpass Nth-order Butterworth highpass Highpass (Resonant) fi. resonhp Virtual analog resonant highpass IIR (Arbitrary Order) fi. iir Nth-order IIR filter Level Filter fi. levelfilter Dynamic level lowpass Low Shelf fi. low_shelf Low shelf Lowpass (Butterworth) fi. lowpass Nth-order Butterworth lowpass Lowpass (Resonant) fi. resonlp Virtual analog resonant lowpass Notch Filter fi. notchw Simple notch filter Peak Equalizer fi. peak_eq Peaking equalizer section","title":"Filters"},{"location":"standardFunctions/#oscillatorssound-generators","text":"Function Type Function Name Description Impulse os. impulse Generate an impulse on start-up Impulse Train os. imptrain Band-limited impulse train Phasor os. phasor Simple phasor Pink Noise no. pink_noise Pink noise generator Pulse Train os. pulsetrain Band-limited pulse train Pulse Train (Low Frequency) os. lf_imptrain Low-frequency pulse train Sawtooth os. sawtooth Band-limited sawtooth wave Sawtooth (Low Frequency) os. lf_saw Low-frequency sawtooth wave Sine (Filter-Based) os. oscs Sine oscillator (filter-based) Sine (Table-Based) os. osc Sine oscillator (table-based) Square os. square Band-limited square wave Square (Low Frequency) os. lf_squarewave Low-frequency square wave Triangle os. triangle Band-limited triangle wave Triangle (Low Frequency) os. lf_triangle Low-frequency triangle wave White Noise no. noise White noise generator","title":"Oscillators/Sound Generators"},{"location":"standardFunctions/#synths","text":"Function Type Function Name Description Additive Drum sy. additiveDrum Additive synthesis drum Bandpassed Sawtooth sy. dubDub Sawtooth through resonant bandpass Comb String sy. combString String model based on a comb filter FM sy. fm Frequency modulation synthesizer Lowpassed Sawtooth sy. sawTrombone \"Trombone\" based on a filtered sawtooth Popping Filter sy. popFilterPerc Popping filter percussion instrument (function() { $('div.table-begin').nextUntil('div.table-end', 'table').addClass('table table-bordered'); })();","title":"Synths"},{"location":"libs/","text":"Faust Libraries Index analyzers (an.)abs_envelope_rect (an.)abs_envelope_tau (an.)abs_envelope_t60 (an.)abs_envelope_t19 (an.)amp_follower (an.)amp_follower_ud (an.)amp_follower_ar (an.)ms_envelope_rect (an.)ms_envelope_tau (an.)ms_envelope_t60 (an.)ms_envelope_t19 (an.)rms_envelope_rect (an.)rms_envelope_tau (an.)rms_envelope_t60 (an.)rms_envelope_t19 (an.)zcr (an.)mth_octave_analyzer (an.)mth_octave_spectral_level6e (an.)[third|half] octave [analyzer|filterbank] (an.)analyzer (an.)gortzelOpt (an.)gortzelComp (an.)goertzel (an.)fft (an.)ifft basics (ba.)samp2sec (ba.)sec2samp (ba.)db2linear (ba.)linear2db (ba.)lin2LogGain (ba.)log2LinGain (ba.)tau2pole (ba.)pole2tau (ba.)midikey2hz (ba.)hz2midikey (ba.)semi2ratio (ba.)ratio2semi (ba.)pianokey2hz (ba.)hz2pianokey (ba.)countdown (ba.)countup (ba.)sweep (ba.)time (ba.)ramp (ba.)tempo (ba.)period (ba.)pulse (ba.)pulsen (ba.)cycle (ba.)beat (ba.)pulse_countup (ba.)pulse_countdown (ba.)pulse_countup_loop (ba.)resetCtr (ba.)pulse_countdown_loop (ba.)count (ba.)take (ba.)subseq (ba.)if (ba.)selector (ba.)select2stereo (ba.)selectn (ba.)selectmulti (ba.)latch (ba.)sAndH (ba.)downSample (ba.)peakhold (ba.)peakholder (ba.)impulsify (ba.)automat (ba.)bpf (ba.)listInterp (ba.)bypass1 (ba.)bypass2 (ba.)bypass1to2 (ba.)bypass_fade (ba.)toggle (ba.)on_and_off (ba.)selectoutn (ba.)slidingReduce (ba.)slidingSum (ba.)slidingSump (ba.)slidingMax (ba.)slidingMin (ba.)slidingMean (ba.)slidingMeanp (ba.)slidingRMS (ba.)slidingRMSp (ba.)parallelOp (ba.)parallelMax (ba.)parallelMin (ba.)parallelMean (ba.)parallelRMS compressors (co.)peak_compression_gain_mono (co.)peak_compression_gain_N_chan (co.)FFcompressor_N_chan (co.)FBcompressor_N_chan (co.)FFFBcompressor_N_chan (co.)RMS_compression_gain_mono (co.)RMS_compression_gain_N_chan (co.)RMS_FFFBcompressor_N_chan (co.)RMS_FBcompressor_peak_limiter_N_chan (co.)compressor_lad_mono (co.)compressor_mono (co.)compressor_stereo (co.)compression_gain_mono (co.)limiter_1176_R4_mono (co.)limiter_1176_R4_stereo (co.)limiter_lad_N (co.)limiter_lad_mono (co.)limiter_lad_stereo (co.)limiter_lad_quad (co.)limiter_lad_bw delays (de.)delay (de.)fdelay (de.)sdelay (de.)fdelaylti and (de.)fdelayltv (de.)fdelay[n] (de.)fdelay[n]a demos (dm.)mth_octave_spectral_level_demo (dm.)parametric_eq_demo (dm.)spectral_tilt_demo (dm.)mth_octave_filterbank_demo and (dm.)filterbank_demo (dm.)cubicnl_demo (dm.)gate_demo (dm.)compressor_demo (dm.)moog_vcf_demo (dm.)wah4_demo (dm.)crybaby_demo (dm.)flanger_demo (dm.)phaser2_demo (dm.)freeverb_demo (dm.)stereo_reverb_tester (dm.)fdnrev0_demo (dm.)zita_rev_fdn_demo (dm.)zita_light (dm.)zita_rev1 (dm.)sawtooth_demo (dm.)virtual_analog_oscillator_demo (dm.)oscrs_demo (dm.)velvet_noise_demo (dm.)latch_demo (dm.)envelopes_demo (dm.)fft_spectral_level_demo (dm.)reverse_echo_demo(nChans) (dm.)pospass_demo (dm.)exciter (dm.)vocoder_demo dx7 (dx.)dx7_ampf (dx.)dx7_egraterisef (dx.)dx7_egraterisepercf (dx.)dx7_egratedecayf (dx.)dx7_egratedecaypercf (dx.)dx7_eglv2peakf (dx.)dx7_velsensf (dx.)dx7_fdbkscalef (dx.)dx7_op (dx.)dx7_algo (dx.)dx7_ui envelopes (en.)smoothEnvelope (en.)ar (en.)arfe (en.)are (en.)asr (en.)adsr (en.)adsre (en.)asre (en.)dx7envelope fds (fd.)model1D (fd.)model2D (fd.)stairsInterp1D (fd.)stairsInterp2D (fd.)linInterp1D (fd.)linInterp2D (fd.)stairsInterp1DOut (fd.)stairsInterp2DOut (fd.)linInterp1DOut (fd.)stairsInterp2DOut (fd.)route1D (fd.)route2D (fd.)schemePoint (fd.)buildScheme1D (fd.)buildScheme2D (fd.)hammer (fd.)bow filters (fi.)zero (fi.)pole (fi.)integrator (fi.)dcblockerat (fi.)dcblocker (fi.)lptN (fi.)ff_comb (fi.)ff_fcomb (fi.)ffcombfilter (fi.)fb_comb (fi.)fb_fcomb (fi.)rev1 (fi.)fbcombfilter and (fi.)ffbcombfilter (fi.)allpass_comb (fi.)allpass_fcomb (fi.)rev2 (fi.)allpass_fcomb5 and (fi.)allpass_fcomb1a (fi.)iir (fi.)fir (fi.)conv and (fi.)convN (fi.)tf1, (fi.)tf2 and (fi.)tf3 (fi.)notchw (fi.)tf21, (fi.)tf22, (fi.)tf22t and (fi.)tf21t (fi.)av2sv (fi.)bvav2nuv (fi.)iir_lat2 (fi.)allpassnt (fi.)iir_kl (fi.)allpassnklt (fi.)iir_lat1 (fi.)allpassn1mt (fi.)iir_nl (fi.)allpassnnlt (fi.)tf2np (fi.)wgr (fi.)nlf2 (fi.)apnl (fi.)allpassn (fi.)allpassnn (fi.)allpasskl (fi.)allpass1m (fi.)tf2s and (fi.)tf2snp (fi.)tf3slf (fi.)tf1s (fi.)tf2sb (fi.)tf1sb (fi.)resonlp (fi.)resonhp (fi.)resonbp (fi.)lowpass (fi.)highpass (fi.)lowpass0_highpass1 (fi.)lowpass_plus|minus_highpass (fi.)lowpass3e (fi.)lowpass6e (fi.)highpass3e (fi.)highpass6e (fi.)bandpass (fi.)bandstop (fi.)bandpass6e (fi.)bandpass12e (fi.)pospass (fi.)low_shelf (fi.)high_shelf (fi.)peak_eq (fi.)peak_eq_cq (fi.)peak_eq_rm (fi.)spectral_tilt (fi.)levelfilter (fi.)levelfilterN (fi.)mth_octave_filterbank[n] (fi.)filterbank (fi.)filterbanki (fi.)svf (fi.)avg_rect hoa (ho.)encoder (ho.)decoder (ho.)decoderStereo (ho.)optimBasic (ho.)optimMaxRe (ho.)optimInPhase (ho.)wider (ho.)map (ho.)rotate (ho.)encoder3D (ho.)optimBasic3D (ho.)optimMaxRe3D (ho.)optimInPhase3D interpolators (it.)interpolate_linear (it.)interpolate_cosine (it.)interpolate_cubic (it.)interpolator_two_points (it.)interpolator_linear (it.)interpolator_cosine (it.)interpolator_two_points (it.)interpolator_cubic (it.)interpolator_select maths (ma.)SR (ma.)BS (ma.)PI (ma.)E (ma.)EPSILON (ma.)MIN (ma.)INFINITY (ma.)FTZ (ma.)neg (ma.)sub(x,y) (ma.)inv (ma.)cbrt (ma.)hypot (ma.)ldexp (ma.)scalb (ma.)log1p (ma.)logb (ma.)ilogb (ma.)log2 (ma.)expm1 (ma.)acosh (ma.)asinh (ma.)atanh (ma.)sinh (ma.)cosh (ma.)tanh (ma.)erf (ma.)erfc (ma.)gamma (ma.)lgamma (ma.)J0 (ma.)J1 (ma.)Jn (ma.)Y0 (ma.)Y1 (ma.)Yn (ma.)fabs, (ma.)fmax, (ma.)fmin (ma.)np2 (ma.)frac (ma.)modulo (ma.)isnan (ma.)isinf (ma.)chebychev (ma.)chebychevpoly (ma.)diffn (ma.)signum (ma.)nextpow2 (ma.)zc mi (mi.)initState (mi.)mass (mi.)oscil (mi.)ground (mi.)posInput (mi.)spring (mi.)damper (mi.)springDamper (mi.)nlSpringDamper2 (mi.)nlSpringDamper3 (mi.)nlSpringDamperClipped (mi.)nlPluck (mi.)nlBow (mi.)collision (mi.)nlCollisionClipped misceffects (ef.)cubicnl (ef.)gate_mono (ef.)gate_stereo (ef.)speakerbp (ef.)piano_dispersion_filter (ef.)stereo_width (ef.)mesh_square (ef.)reverseEchoN(nChans,delay) (ef.)reverseDelayRamped(delay,phase) (ef.)uniformPanToStereo(nChans) (ef.)echo (ef.)transpose oscillators (os.)sinwaveform (os.)coswaveform (os.)phasor (os.)hs_phasor (os.)hsp_phasor (os.)oscsin (os.)hs_oscsin (os.)osccos (os.)oscp (os.)osci (os.)lf_imptrain (os.)lf_pulsetrainpos (os.)lf_pulsetrain (os.)lf_squarewavepos (os.)lf_squarewave (os.)lf_trianglepos (os.)lf_triangle (os.)lf_rawsaw (os.)lf_sawpos_phase (os.)lf_sawpos (os.)lf_sawpos_reset (os.)lf_sawpos_phase_reset (os.)lf_saw (os.)sawN (os.)sawNp (os.)saw2dpw (os.)saw3 (os.)sawtooth (os.)saw2f2 (os.)saw2f4 (os.)pulsetrainN (os.)pulsetrain (os.)squareN (os.)square (os.)impulse (os.)imptrainN (os.)imptrain (os.)triangleN (os.)triangle (os.)oscb (os.)oscrq (os.)oscrs (os.)oscrc (os.)oscs (os.)osc (os.)oscw (os.)oscws (os.)oscwq (os.)oscw (os.)CZsaw (os.)CZsawP (os.)CZsquare (os.)CZsquareP (os.)CZpulse (os.)CZpulseP (os.)CZsinePulse (os.)CZsinePulseP (os.)CZhalfSine (os.)CZhalfSineP (os.)CZresSaw (os.)CZresTriangle (os.)CZresTrap (os.)polyblep (os.)polyblep_saw (os.)polyblep_square (os.)polyblep_triangle (os.)quadosc noises (no.)noise (no.)multirandom (no.)multinoise (no.)noises (no.)pink_noise (no.)pink_noise_vm (no.)lfnoise, (no.)lfnoise0 and (no.)lfnoiseN (no.)sparse_noise_vm (no.)velvet_noise_vm (no.)gnoise phaflangers (pf.)flanger_mono (pf.)flanger_stereo (pf.)phaser2_mono (pf.)phaser2_stereo physmodels (pm.)speedOfSound (pm.)maxLength (pm.)f2l (pm.)l2f (pm.)l2s (pm.)basicBlock (pm.)chain (pm.)inLeftWave (pm.)inRightWave (pm.)in (pm.)outLeftWave (pm.)outRightWave (pm.)out (pm.)terminations (pm.)lTermination (pm.)rTermination (pm.)closeIns (pm.)closeOuts (pm.)endChain (pm.)waveguideN (pm.)waveguide (pm.)bridgeFilter (pm.)modeFilter (pm.)stringSegment (pm.)openString (pm.)nylonString (pm.)steelString (pm.)openStringPick (pm.)openStringPickUp (pm.)openStringPickDown (pm.)ksReflexionFilter (pm.)rStringRigidTermination (pm.)lStringRigidTermination (pm.)elecGuitarBridge (pm.)elecGuitarNuts (pm.)guitarBridge (pm.)guitarNuts (pm.)idealString (pm.)ks (pm.)ks_ui_MIDI (pm.)elecGuitarModel (pm.)elecGuitar (pm.)elecGuitar_ui_MIDI (pm.)guitarBody (pm.)guitarModel (pm.)guitar (pm.)guitar_ui_MIDI (pm.)nylonGuitarModel (pm.)nylonGuitar (pm.)nylonGuitar_ui_MIDI (pm.)modeInterpRes (pm.)modularInterpBody (pm.)modularInterpStringModel (pm.)modularInterpInstr (pm.)modularInterpInstr_ui_MIDI (pm.)bowTable (pm.)violinBowTable (pm.)bowInteraction (pm.)violinBow (pm.)violinBowedString (pm.)violinNuts (pm.)violinBridge (pm.)violinBody (pm.)violinModel (pm.)violin_ui (pm.)violin_ui_MIDI (pm.)openTube (pm.)reedTable (pm.)fluteJetTable (pm.)brassLipsTable (pm.)clarinetReed (pm.)clarinetMouthPiece (pm.)brassLips (pm.)fluteEmbouchure (pm.)wBell (pm.)fluteHead (pm.)fluteFoot (pm.)clarinetModel (pm.)clarinetModel_ui (pm.)clarinet_ui (pm.)clarinet_ui_MIDI (pm.)brassModel (pm.)brassModel_ui (pm.)brass_ui (pm.)brass_ui_MIDI (pm.)fluteModel (pm.)fluteModel_ui (pm.)flute_ui (pm.)flute_ui_MIDI (pm.)impulseExcitation (pm.)strikeModel (pm.)strike (pm.)pluckString (pm.)blower (pm.)blower_ui (pm.)djembeModel (pm.)djembe (pm.)djembe_ui_MIDI (pm.)marimbaBarModel (pm.)marimbaResTube (pm.)marimbaModel (pm.)marimba (pm.)marimba_ui_MIDI (pm.)churchBellModel (pm.)churchBell (pm.)churchBell_ui (pm.)englishBellModel (pm.)englishBell (pm.)englishBell_ui (pm.)frenchBellModel (pm.)frenchBell (pm.)frenchBell_ui (pm.)germanBellModel (pm.)germanBell (pm.)germanBell_ui (pm.)russianBellModel (pm.)russianBell (pm.)russianBell_ui (pm.)standardBellModel (pm.)standardBell (pm.)standardBell_ui (pm.)formantValues (pm.)voiceGender (pm.)skirtWidthMultiplier (pm.)autobendFreq (pm.)vocalEffort (pm.)fof (pm.)fofSH (pm.)fofCycle (pm.)fofSmooth (pm.)formantFilterFofCycle (pm.)formantFilterFofSmooth (pm.)formantFilterBP (pm.)formantFilterbank (pm.)formantFilterbankFofCycle (pm.)formantFilterbankFofSmooth (pm.)formantFilterbankBP (pm.)SFFormantModel (pm.)SFFormantModelFofCycle (pm.)SFFormantModelFofSmooth (pm.)SFFormantModelBP (pm.)SFFormantModelFofCycle_ui (pm.)SFFormantModelFofSmooth_ui (pm.)SFFormantModelBP_ui (pm.)SFFormantModelFofCycle_ui_MIDI (pm.)SFFormantModelFofSmooth_ui_MIDI (pm.)SFFormantModelBP_ui_MIDI (pm.)allpassNL quantizers (qu.)quantize (qu.)quantizeSmoothed (qu.)ionian (qu.)dorian (qu.)phrygian (qu.)lydian (qu.)mixo (qu.)eolian (qu.)locrian (qu.)pentanat (qu.)kumoi (qu.)natural (qu.)dodeca (qu.)dimin (qu.)penta reducemaps (rm.)reduce (rm.)reducemap reverbs (re.)jcrev (re.)satrev (re.)fdnrev0 (re.)zita_rev_fdn (re.)zita_rev1_stereo (re.)zita_rev1_ambi (re.)mono_freeverb (re.)stereo_freeverb routes (ro.)cross (ro.)crossnn (ro.)crossn1 (ro.)cross1n (ro.)crossNM (ro.)interleave (ro.)butterfly (ro.)hadamard (ro.)recursivize signals (si.)bus (si.)block (si.)interpolate (si.)smoo (si.)polySmooth (si.)smoothAndH (si.)bsmooth (si.)dot (si.)smooth (si.)cbus (si.)cmul (si.)cconj (si.)lag_ud (si.)rev soundfiles (so.)loop (so.)loop_speed (so.)loop_speed_level spats (sp.)panner (sp.)spat (sp.)stereoize synths (sy.)popFilterPerc (sy.)dubDub (sy.)sawTrombone (sy.)combString (sy.)additiveDrum (sy.)fm vaeffects (ve.)moog_vcf (ve.)moog_vcf_2b[n] (ve.)moogLadder (ve.)moogHalfLadder (ve.)diodeLadder (ve.)korg35LPF (ve.)korg35HPF (ve.)oberheim (ve.)oberheimBSF (ve.)oberheimBPF (ve.)oberheimHPF (ve.)oberheimLPF (ve.)sallenKeyOnePole (ve.)sallenKeyOnePoleLPF (ve.)sallenKeyOnePoleHPF (ve.)sallenKey2ndOrder (ve.)sallenKey2ndOrderLPF (ve.)sallenKey2ndOrderBPF (ve.)sallenKey2ndOrderHPF (ve.)wah4 (ve.)autowah (ve.)crybaby (ve.)vocoder version (vl.)version wdmodels (wd.)resistor (wd.)resistor_output (wd.)resistor_output_current (wd.)u_voltage (wd.)u_current (wd.)resVoltage (wd.)resVoltage_output (wd.)u_resVoltage (wd.)resCurrent (wd.)u_resCurrent (wd.)u_switch (wd.)capacitor (wd.)capacitor_output (wd.)inductor (wd.)inductor_output (wd.)u_idealDiode (wd.)u_chua (wd.)lambert (wd.)u_diodePair (wd.)u_diodeSingle (wd.)u_diodeAntiparallel (wd.)u_parallel_2 (wd.)parallel_2 (wd.)u_series_2 (wd.)series_2 (wd.)parallel_current (wd.)series_voltage (wd.)parallel (wd.)series (wd.)builddown (wd.)buildup (wd.)getres (wd.)parres (wd.)buildout (wd.)buildtree webaudio (wa.)lowpass2 (wa.)highpass2 (wa.)bandpass2 (wa.)notch2 (wa.)allpass2 (wa.)peaking2 (wa.)lowshelf2 (wa.)highshelf2","title":"Index"},{"location":"libs/#faust-libraries-index","text":"","title":"Faust Libraries Index"},{"location":"libs/#analyzers","text":"(an.)abs_envelope_rect (an.)abs_envelope_tau (an.)abs_envelope_t60 (an.)abs_envelope_t19 (an.)amp_follower (an.)amp_follower_ud (an.)amp_follower_ar (an.)ms_envelope_rect (an.)ms_envelope_tau (an.)ms_envelope_t60 (an.)ms_envelope_t19 (an.)rms_envelope_rect (an.)rms_envelope_tau (an.)rms_envelope_t60 (an.)rms_envelope_t19 (an.)zcr (an.)mth_octave_analyzer (an.)mth_octave_spectral_level6e (an.)[third|half] octave [analyzer|filterbank] (an.)analyzer (an.)gortzelOpt (an.)gortzelComp (an.)goertzel (an.)fft (an.)ifft","title":"analyzers"},{"location":"libs/#basics","text":"(ba.)samp2sec (ba.)sec2samp (ba.)db2linear (ba.)linear2db (ba.)lin2LogGain (ba.)log2LinGain (ba.)tau2pole (ba.)pole2tau (ba.)midikey2hz (ba.)hz2midikey (ba.)semi2ratio (ba.)ratio2semi (ba.)pianokey2hz (ba.)hz2pianokey (ba.)countdown (ba.)countup (ba.)sweep (ba.)time (ba.)ramp (ba.)tempo (ba.)period (ba.)pulse (ba.)pulsen (ba.)cycle (ba.)beat (ba.)pulse_countup (ba.)pulse_countdown (ba.)pulse_countup_loop (ba.)resetCtr (ba.)pulse_countdown_loop (ba.)count (ba.)take (ba.)subseq (ba.)if (ba.)selector (ba.)select2stereo (ba.)selectn (ba.)selectmulti (ba.)latch (ba.)sAndH (ba.)downSample (ba.)peakhold (ba.)peakholder (ba.)impulsify (ba.)automat (ba.)bpf (ba.)listInterp (ba.)bypass1 (ba.)bypass2 (ba.)bypass1to2 (ba.)bypass_fade (ba.)toggle (ba.)on_and_off (ba.)selectoutn (ba.)slidingReduce (ba.)slidingSum (ba.)slidingSump (ba.)slidingMax (ba.)slidingMin (ba.)slidingMean (ba.)slidingMeanp (ba.)slidingRMS (ba.)slidingRMSp (ba.)parallelOp (ba.)parallelMax (ba.)parallelMin (ba.)parallelMean (ba.)parallelRMS","title":"basics"},{"location":"libs/#compressors","text":"(co.)peak_compression_gain_mono (co.)peak_compression_gain_N_chan (co.)FFcompressor_N_chan (co.)FBcompressor_N_chan (co.)FFFBcompressor_N_chan (co.)RMS_compression_gain_mono (co.)RMS_compression_gain_N_chan (co.)RMS_FFFBcompressor_N_chan (co.)RMS_FBcompressor_peak_limiter_N_chan (co.)compressor_lad_mono (co.)compressor_mono (co.)compressor_stereo (co.)compression_gain_mono (co.)limiter_1176_R4_mono (co.)limiter_1176_R4_stereo (co.)limiter_lad_N (co.)limiter_lad_mono (co.)limiter_lad_stereo (co.)limiter_lad_quad (co.)limiter_lad_bw","title":"compressors"},{"location":"libs/#delays","text":"(de.)delay (de.)fdelay (de.)sdelay (de.)fdelaylti and (de.)fdelayltv (de.)fdelay[n] (de.)fdelay[n]a","title":"delays"},{"location":"libs/#demos","text":"(dm.)mth_octave_spectral_level_demo (dm.)parametric_eq_demo (dm.)spectral_tilt_demo (dm.)mth_octave_filterbank_demo and (dm.)filterbank_demo (dm.)cubicnl_demo (dm.)gate_demo (dm.)compressor_demo (dm.)moog_vcf_demo (dm.)wah4_demo (dm.)crybaby_demo (dm.)flanger_demo (dm.)phaser2_demo (dm.)freeverb_demo (dm.)stereo_reverb_tester (dm.)fdnrev0_demo (dm.)zita_rev_fdn_demo (dm.)zita_light (dm.)zita_rev1 (dm.)sawtooth_demo (dm.)virtual_analog_oscillator_demo (dm.)oscrs_demo (dm.)velvet_noise_demo (dm.)latch_demo (dm.)envelopes_demo (dm.)fft_spectral_level_demo (dm.)reverse_echo_demo(nChans) (dm.)pospass_demo (dm.)exciter (dm.)vocoder_demo","title":"demos"},{"location":"libs/#dx7","text":"(dx.)dx7_ampf (dx.)dx7_egraterisef (dx.)dx7_egraterisepercf (dx.)dx7_egratedecayf (dx.)dx7_egratedecaypercf (dx.)dx7_eglv2peakf (dx.)dx7_velsensf (dx.)dx7_fdbkscalef (dx.)dx7_op (dx.)dx7_algo (dx.)dx7_ui","title":"dx7"},{"location":"libs/#envelopes","text":"(en.)smoothEnvelope (en.)ar (en.)arfe (en.)are (en.)asr (en.)adsr (en.)adsre (en.)asre (en.)dx7envelope","title":"envelopes"},{"location":"libs/#fds","text":"(fd.)model1D (fd.)model2D (fd.)stairsInterp1D (fd.)stairsInterp2D (fd.)linInterp1D (fd.)linInterp2D (fd.)stairsInterp1DOut (fd.)stairsInterp2DOut (fd.)linInterp1DOut (fd.)stairsInterp2DOut (fd.)route1D (fd.)route2D (fd.)schemePoint (fd.)buildScheme1D (fd.)buildScheme2D (fd.)hammer (fd.)bow","title":"fds"},{"location":"libs/#filters","text":"(fi.)zero (fi.)pole (fi.)integrator (fi.)dcblockerat (fi.)dcblocker (fi.)lptN (fi.)ff_comb (fi.)ff_fcomb (fi.)ffcombfilter (fi.)fb_comb (fi.)fb_fcomb (fi.)rev1 (fi.)fbcombfilter and (fi.)ffbcombfilter (fi.)allpass_comb (fi.)allpass_fcomb (fi.)rev2 (fi.)allpass_fcomb5 and (fi.)allpass_fcomb1a (fi.)iir (fi.)fir (fi.)conv and (fi.)convN (fi.)tf1, (fi.)tf2 and (fi.)tf3 (fi.)notchw (fi.)tf21, (fi.)tf22, (fi.)tf22t and (fi.)tf21t (fi.)av2sv (fi.)bvav2nuv (fi.)iir_lat2 (fi.)allpassnt (fi.)iir_kl (fi.)allpassnklt (fi.)iir_lat1 (fi.)allpassn1mt (fi.)iir_nl (fi.)allpassnnlt (fi.)tf2np (fi.)wgr (fi.)nlf2 (fi.)apnl (fi.)allpassn (fi.)allpassnn (fi.)allpasskl (fi.)allpass1m (fi.)tf2s and (fi.)tf2snp (fi.)tf3slf (fi.)tf1s (fi.)tf2sb (fi.)tf1sb (fi.)resonlp (fi.)resonhp (fi.)resonbp (fi.)lowpass (fi.)highpass (fi.)lowpass0_highpass1 (fi.)lowpass_plus|minus_highpass (fi.)lowpass3e (fi.)lowpass6e (fi.)highpass3e (fi.)highpass6e (fi.)bandpass (fi.)bandstop (fi.)bandpass6e (fi.)bandpass12e (fi.)pospass (fi.)low_shelf (fi.)high_shelf (fi.)peak_eq (fi.)peak_eq_cq (fi.)peak_eq_rm (fi.)spectral_tilt (fi.)levelfilter (fi.)levelfilterN (fi.)mth_octave_filterbank[n] (fi.)filterbank (fi.)filterbanki (fi.)svf (fi.)avg_rect","title":"filters"},{"location":"libs/#hoa","text":"(ho.)encoder (ho.)decoder (ho.)decoderStereo (ho.)optimBasic (ho.)optimMaxRe (ho.)optimInPhase (ho.)wider (ho.)map (ho.)rotate (ho.)encoder3D (ho.)optimBasic3D (ho.)optimMaxRe3D (ho.)optimInPhase3D","title":"hoa"},{"location":"libs/#interpolators","text":"(it.)interpolate_linear (it.)interpolate_cosine (it.)interpolate_cubic (it.)interpolator_two_points (it.)interpolator_linear (it.)interpolator_cosine (it.)interpolator_two_points (it.)interpolator_cubic (it.)interpolator_select","title":"interpolators"},{"location":"libs/#maths","text":"(ma.)SR (ma.)BS (ma.)PI (ma.)E (ma.)EPSILON (ma.)MIN (ma.)INFINITY (ma.)FTZ (ma.)neg (ma.)sub(x,y) (ma.)inv (ma.)cbrt (ma.)hypot (ma.)ldexp (ma.)scalb (ma.)log1p (ma.)logb (ma.)ilogb (ma.)log2 (ma.)expm1 (ma.)acosh (ma.)asinh (ma.)atanh (ma.)sinh (ma.)cosh (ma.)tanh (ma.)erf (ma.)erfc (ma.)gamma (ma.)lgamma (ma.)J0 (ma.)J1 (ma.)Jn (ma.)Y0 (ma.)Y1 (ma.)Yn (ma.)fabs, (ma.)fmax, (ma.)fmin (ma.)np2 (ma.)frac (ma.)modulo (ma.)isnan (ma.)isinf (ma.)chebychev (ma.)chebychevpoly (ma.)diffn (ma.)signum (ma.)nextpow2 (ma.)zc","title":"maths"},{"location":"libs/#mi","text":"(mi.)initState (mi.)mass (mi.)oscil (mi.)ground (mi.)posInput (mi.)spring (mi.)damper (mi.)springDamper (mi.)nlSpringDamper2 (mi.)nlSpringDamper3 (mi.)nlSpringDamperClipped (mi.)nlPluck (mi.)nlBow (mi.)collision (mi.)nlCollisionClipped","title":"mi"},{"location":"libs/#misceffects","text":"(ef.)cubicnl (ef.)gate_mono (ef.)gate_stereo (ef.)speakerbp (ef.)piano_dispersion_filter (ef.)stereo_width (ef.)mesh_square (ef.)reverseEchoN(nChans,delay) (ef.)reverseDelayRamped(delay,phase) (ef.)uniformPanToStereo(nChans) (ef.)echo (ef.)transpose","title":"misceffects"},{"location":"libs/#oscillators","text":"(os.)sinwaveform (os.)coswaveform (os.)phasor (os.)hs_phasor (os.)hsp_phasor (os.)oscsin (os.)hs_oscsin (os.)osccos (os.)oscp (os.)osci (os.)lf_imptrain (os.)lf_pulsetrainpos (os.)lf_pulsetrain (os.)lf_squarewavepos (os.)lf_squarewave (os.)lf_trianglepos (os.)lf_triangle (os.)lf_rawsaw (os.)lf_sawpos_phase (os.)lf_sawpos (os.)lf_sawpos_reset (os.)lf_sawpos_phase_reset (os.)lf_saw (os.)sawN (os.)sawNp (os.)saw2dpw (os.)saw3 (os.)sawtooth (os.)saw2f2 (os.)saw2f4 (os.)pulsetrainN (os.)pulsetrain (os.)squareN (os.)square (os.)impulse (os.)imptrainN (os.)imptrain (os.)triangleN (os.)triangle (os.)oscb (os.)oscrq (os.)oscrs (os.)oscrc (os.)oscs (os.)osc (os.)oscw (os.)oscws (os.)oscwq (os.)oscw (os.)CZsaw (os.)CZsawP (os.)CZsquare (os.)CZsquareP (os.)CZpulse (os.)CZpulseP (os.)CZsinePulse (os.)CZsinePulseP (os.)CZhalfSine (os.)CZhalfSineP (os.)CZresSaw (os.)CZresTriangle (os.)CZresTrap (os.)polyblep (os.)polyblep_saw (os.)polyblep_square (os.)polyblep_triangle (os.)quadosc","title":"oscillators"},{"location":"libs/#noises","text":"(no.)noise (no.)multirandom (no.)multinoise (no.)noises (no.)pink_noise (no.)pink_noise_vm (no.)lfnoise, (no.)lfnoise0 and (no.)lfnoiseN (no.)sparse_noise_vm (no.)velvet_noise_vm (no.)gnoise","title":"noises"},{"location":"libs/#phaflangers","text":"(pf.)flanger_mono (pf.)flanger_stereo (pf.)phaser2_mono (pf.)phaser2_stereo","title":"phaflangers"},{"location":"libs/#physmodels","text":"(pm.)speedOfSound (pm.)maxLength (pm.)f2l (pm.)l2f (pm.)l2s (pm.)basicBlock (pm.)chain (pm.)inLeftWave (pm.)inRightWave (pm.)in (pm.)outLeftWave (pm.)outRightWave (pm.)out (pm.)terminations (pm.)lTermination (pm.)rTermination (pm.)closeIns (pm.)closeOuts (pm.)endChain (pm.)waveguideN (pm.)waveguide (pm.)bridgeFilter (pm.)modeFilter (pm.)stringSegment (pm.)openString (pm.)nylonString (pm.)steelString (pm.)openStringPick (pm.)openStringPickUp (pm.)openStringPickDown (pm.)ksReflexionFilter (pm.)rStringRigidTermination (pm.)lStringRigidTermination (pm.)elecGuitarBridge (pm.)elecGuitarNuts (pm.)guitarBridge (pm.)guitarNuts (pm.)idealString (pm.)ks (pm.)ks_ui_MIDI (pm.)elecGuitarModel (pm.)elecGuitar (pm.)elecGuitar_ui_MIDI (pm.)guitarBody (pm.)guitarModel (pm.)guitar (pm.)guitar_ui_MIDI (pm.)nylonGuitarModel (pm.)nylonGuitar (pm.)nylonGuitar_ui_MIDI (pm.)modeInterpRes (pm.)modularInterpBody (pm.)modularInterpStringModel (pm.)modularInterpInstr (pm.)modularInterpInstr_ui_MIDI (pm.)bowTable (pm.)violinBowTable (pm.)bowInteraction (pm.)violinBow (pm.)violinBowedString (pm.)violinNuts (pm.)violinBridge (pm.)violinBody (pm.)violinModel (pm.)violin_ui (pm.)violin_ui_MIDI (pm.)openTube (pm.)reedTable (pm.)fluteJetTable (pm.)brassLipsTable (pm.)clarinetReed (pm.)clarinetMouthPiece (pm.)brassLips (pm.)fluteEmbouchure (pm.)wBell (pm.)fluteHead (pm.)fluteFoot (pm.)clarinetModel (pm.)clarinetModel_ui (pm.)clarinet_ui (pm.)clarinet_ui_MIDI (pm.)brassModel (pm.)brassModel_ui (pm.)brass_ui (pm.)brass_ui_MIDI (pm.)fluteModel (pm.)fluteModel_ui (pm.)flute_ui (pm.)flute_ui_MIDI (pm.)impulseExcitation (pm.)strikeModel (pm.)strike (pm.)pluckString (pm.)blower (pm.)blower_ui (pm.)djembeModel (pm.)djembe (pm.)djembe_ui_MIDI (pm.)marimbaBarModel (pm.)marimbaResTube (pm.)marimbaModel (pm.)marimba (pm.)marimba_ui_MIDI (pm.)churchBellModel (pm.)churchBell (pm.)churchBell_ui (pm.)englishBellModel (pm.)englishBell (pm.)englishBell_ui (pm.)frenchBellModel (pm.)frenchBell (pm.)frenchBell_ui (pm.)germanBellModel (pm.)germanBell (pm.)germanBell_ui (pm.)russianBellModel (pm.)russianBell (pm.)russianBell_ui (pm.)standardBellModel (pm.)standardBell (pm.)standardBell_ui (pm.)formantValues (pm.)voiceGender (pm.)skirtWidthMultiplier (pm.)autobendFreq (pm.)vocalEffort (pm.)fof (pm.)fofSH (pm.)fofCycle (pm.)fofSmooth (pm.)formantFilterFofCycle (pm.)formantFilterFofSmooth (pm.)formantFilterBP (pm.)formantFilterbank (pm.)formantFilterbankFofCycle (pm.)formantFilterbankFofSmooth (pm.)formantFilterbankBP (pm.)SFFormantModel (pm.)SFFormantModelFofCycle (pm.)SFFormantModelFofSmooth (pm.)SFFormantModelBP (pm.)SFFormantModelFofCycle_ui (pm.)SFFormantModelFofSmooth_ui (pm.)SFFormantModelBP_ui (pm.)SFFormantModelFofCycle_ui_MIDI (pm.)SFFormantModelFofSmooth_ui_MIDI (pm.)SFFormantModelBP_ui_MIDI (pm.)allpassNL","title":"physmodels"},{"location":"libs/#quantizers","text":"(qu.)quantize (qu.)quantizeSmoothed (qu.)ionian (qu.)dorian (qu.)phrygian (qu.)lydian (qu.)mixo (qu.)eolian (qu.)locrian (qu.)pentanat (qu.)kumoi (qu.)natural (qu.)dodeca (qu.)dimin (qu.)penta","title":"quantizers"},{"location":"libs/#reducemaps","text":"(rm.)reduce (rm.)reducemap","title":"reducemaps"},{"location":"libs/#reverbs","text":"(re.)jcrev (re.)satrev (re.)fdnrev0 (re.)zita_rev_fdn (re.)zita_rev1_stereo (re.)zita_rev1_ambi (re.)mono_freeverb (re.)stereo_freeverb","title":"reverbs"},{"location":"libs/#routes","text":"(ro.)cross (ro.)crossnn (ro.)crossn1 (ro.)cross1n (ro.)crossNM (ro.)interleave (ro.)butterfly (ro.)hadamard (ro.)recursivize","title":"routes"},{"location":"libs/#signals","text":"(si.)bus (si.)block (si.)interpolate (si.)smoo (si.)polySmooth (si.)smoothAndH (si.)bsmooth (si.)dot (si.)smooth (si.)cbus (si.)cmul (si.)cconj (si.)lag_ud (si.)rev","title":"signals"},{"location":"libs/#soundfiles","text":"(so.)loop (so.)loop_speed (so.)loop_speed_level","title":"soundfiles"},{"location":"libs/#spats","text":"(sp.)panner (sp.)spat (sp.)stereoize","title":"spats"},{"location":"libs/#synths","text":"(sy.)popFilterPerc (sy.)dubDub (sy.)sawTrombone (sy.)combString (sy.)additiveDrum (sy.)fm","title":"synths"},{"location":"libs/#vaeffects","text":"(ve.)moog_vcf (ve.)moog_vcf_2b[n] (ve.)moogLadder (ve.)moogHalfLadder (ve.)diodeLadder (ve.)korg35LPF (ve.)korg35HPF (ve.)oberheim (ve.)oberheimBSF (ve.)oberheimBPF (ve.)oberheimHPF (ve.)oberheimLPF (ve.)sallenKeyOnePole (ve.)sallenKeyOnePoleLPF (ve.)sallenKeyOnePoleHPF (ve.)sallenKey2ndOrder (ve.)sallenKey2ndOrderLPF (ve.)sallenKey2ndOrderBPF (ve.)sallenKey2ndOrderHPF (ve.)wah4 (ve.)autowah (ve.)crybaby (ve.)vocoder","title":"vaeffects"},{"location":"libs/#version","text":"(vl.)version","title":"version"},{"location":"libs/#wdmodels","text":"(wd.)resistor (wd.)resistor_output (wd.)resistor_output_current (wd.)u_voltage (wd.)u_current (wd.)resVoltage (wd.)resVoltage_output (wd.)u_resVoltage (wd.)resCurrent (wd.)u_resCurrent (wd.)u_switch (wd.)capacitor (wd.)capacitor_output (wd.)inductor (wd.)inductor_output (wd.)u_idealDiode (wd.)u_chua (wd.)lambert (wd.)u_diodePair (wd.)u_diodeSingle (wd.)u_diodeAntiparallel (wd.)u_parallel_2 (wd.)parallel_2 (wd.)u_series_2 (wd.)series_2 (wd.)parallel_current (wd.)series_voltage (wd.)parallel (wd.)series (wd.)builddown (wd.)buildup (wd.)getres (wd.)parres (wd.)buildout (wd.)buildtree","title":"wdmodels"},{"location":"libs/#webaudio","text":"(wa.)lowpass2 (wa.)highpass2 (wa.)bandpass2 (wa.)notch2 (wa.)allpass2 (wa.)peaking2 (wa.)lowshelf2 (wa.)highshelf2","title":"webaudio"},{"location":"libs/analyzers/","text":"analyzers.lib Analyzers library. Its official prefix is an . Amplitude Tracking (an.)abs_envelope_rect Absolute value average with moving-average algorithm. Usage _ : abs_envelope_rect(period) : _; Where: period : sets the averaging frame in seconds (an.)abs_envelope_tau Absolute value average with one-pole lowpass and tau response. (See filters.lib.) Usage _ : abs_envelope_tau(period) : _; Where: period : (time to decay by 1/e) sets the averaging frame in secs (an.)abs_envelope_t60 Absolute value average with one-pole lowpass and t60 response. (See filters.lib.) Usage _ : abs_envelope_t60(period) : _; Where: period : (time to decay by 60 dB) sets the averaging frame in secs (an.)abs_envelope_t19 Absolute value average with one-pole lowpass and t19 response. (See filters.lib.) Usage _ : abs_envelope_t19(period) : _; Where: period : (time to decay by 1/e^2.2) sets the averaging frame in secs (an.)amp_follower Classic analog audio envelope follower with infinitely fast rise and exponential decay. The amplitude envelope instantaneously follows the absolute value going up, but then floats down exponentially. amp_follower is a standard Faust function. Usage _ : amp_follower(rel) : _ Where: rel : release time = amplitude-envelope time-constant (sec) going down Reference Musical Engineer's Handbook, Bernie Hutchins, Ithaca NY, 1975 Electronotes Newsletter, Bernie Hutchins (an.)amp_follower_ud Envelope follower with different up and down time-constants (also called a \"peak detector\"). Usage _ : amp_follower_ud(att,rel) : _ Where: att : attack time = amplitude-envelope time constant (sec) going up rel : release time = amplitude-envelope time constant (sec) going down Note We assume rel >> att. Otherwise, consider rel ~ max(rel,att). For audio, att is normally faster (smaller) than rel (e.g., 0.001 and 0.01). Use amp_follower_ar below to remove this restriction. Reference \"Digital Dynamic Range Compressor Design --- A Tutorial and Analysis\", by Dimitrios Giannoulis, Michael Massberg, and Joshua D. Reiss https://www.eecs.qmul.ac.uk/~josh/documents/2012/GiannoulisMassbergReiss-dynamicrangecompression-JAES2012.pdf (an.)amp_follower_ar Envelope follower with independent attack and release times. The release can be shorter than the attack (unlike in amp_follower_ud above). Usage _ : amp_follower_ar(att,rel) : _; Author Jonatan Liljedahl, revised by RM (an.)ms_envelope_rect Mean square with moving-average algorithm. Usage _ : ms_envelope_rect(period) : _; Where: period : sets the averaging frame in secs (an.)ms_envelope_tau Mean square average with one-pole lowpass and tau response. (See filters.lib.) Usage _ : ms_envelope_tau(period) : _; Where: period : (time to decay by 1/e) sets the averaging frame in secs (an.)ms_envelope_t60 Mean square with one-pole lowpass and t60 response. (See filters.lib.) Usage _ : ms_envelope_t60(period) : _; Where: period : (time to decay by 60 dB) sets the averaging frame in secs (an.)ms_envelope_t19 Mean square with one-pole lowpass and t19 response. (See filters.lib.) Usage _ : ms_envelope_t19(period) : _; Where: period : (time to decay by 1/e^2.2) sets the averaging frame in secs (an.)rms_envelope_rect Root mean square with moving-average algorithm. Usage _ : rms_envelope_rect(period) : _; Where: period : sets the averaging frame in secs (an.)rms_envelope_tau Root mean square with one-pole lowpass and tau response. (See filters.lib.) Usage _ : rms_envelope_tau(period) : _; Where: period : (time to decay by 1/e) sets the averaging frame in secs (an.)rms_envelope_t60 Root mean square with one-pole lowpass and t60 response. (See filters.lib.) Usage _ : rms_envelope_t60(period) : _; Where: period : (time to decay by 60 dB) sets the averaging frame in secs (an.)rms_envelope_t19 Root mean square with one-pole lowpass and t19 response. (See filters.lib.) Usage _ : rms_envelope_t19(period) : _; Where: period : (time to decay by 1/e^2.2) sets the averaging frame in secs (an.)zcr Zero-crossing rate (ZCR) with one-pole lowpass averaging based on the tau constant. It outputs an index between 0 and 1 at a desired analysis frame. The ZCR of a signal correlates with the noisiness [Gouyon et al. 2000] and the spectral centroid [Herrera-Boyer et al. 2006] of a signal. For sinusoidal signals, the ZCR can be multiplied by ma.SR/2 and used as a frequency detector. For example, it can be deployed as a computationally efficient adaptive mechanism for automatic Larsen suppression. Usage _ : zcr(tau) : _; Where: tau : (time to decay by e^-1) sets the averaging frame in seconds. Spectrum-Analyzers Spectrum-analyzers split the input signal into a bank of parallel signals, one for each spectral band. They are related to the Mth-Octave Filter-Banks in filters.lib . The documentation of this library contains more details about the implementation. The parameters are: M : number of band-slices per octave (>1) N : total number of bands (>2) ftop = upper bandlimit of the Mth-octave bands (> att. Otherwise, consider rel ~ max(rel,att). For audio, att is normally faster (smaller) than rel (e.g., 0.001 and 0.01). Use amp_follower_ar below to remove this restriction.","title":"Note"},{"location":"libs/analyzers/#reference_1","text":"\"Digital Dynamic Range Compressor Design --- A Tutorial and Analysis\", by Dimitrios Giannoulis, Michael Massberg, and Joshua D. Reiss https://www.eecs.qmul.ac.uk/~josh/documents/2012/GiannoulisMassbergReiss-dynamicrangecompression-JAES2012.pdf","title":"Reference"},{"location":"libs/analyzers/#anamp_follower_ar","text":"Envelope follower with independent attack and release times. The release can be shorter than the attack (unlike in amp_follower_ud above).","title":"(an.)amp_follower_ar"},{"location":"libs/analyzers/#usage_6","text":"_ : amp_follower_ar(att,rel) : _; Author Jonatan Liljedahl, revised by RM","title":"Usage"},{"location":"libs/analyzers/#anms_envelope_rect","text":"Mean square with moving-average algorithm.","title":"(an.)ms_envelope_rect"},{"location":"libs/analyzers/#usage_7","text":"_ : ms_envelope_rect(period) : _; Where: period : sets the averaging frame in secs","title":"Usage"},{"location":"libs/analyzers/#anms_envelope_tau","text":"Mean square average with one-pole lowpass and tau response. (See filters.lib.)","title":"(an.)ms_envelope_tau"},{"location":"libs/analyzers/#usage_8","text":"_ : ms_envelope_tau(period) : _; Where: period : (time to decay by 1/e) sets the averaging frame in secs","title":"Usage"},{"location":"libs/analyzers/#anms_envelope_t60","text":"Mean square with one-pole lowpass and t60 response. (See filters.lib.)","title":"(an.)ms_envelope_t60"},{"location":"libs/analyzers/#usage_9","text":"_ : ms_envelope_t60(period) : _; Where: period : (time to decay by 60 dB) sets the averaging frame in secs","title":"Usage"},{"location":"libs/analyzers/#anms_envelope_t19","text":"Mean square with one-pole lowpass and t19 response. (See filters.lib.)","title":"(an.)ms_envelope_t19"},{"location":"libs/analyzers/#usage_10","text":"_ : ms_envelope_t19(period) : _; Where: period : (time to decay by 1/e^2.2) sets the averaging frame in secs","title":"Usage"},{"location":"libs/analyzers/#anrms_envelope_rect","text":"Root mean square with moving-average algorithm.","title":"(an.)rms_envelope_rect"},{"location":"libs/analyzers/#usage_11","text":"_ : rms_envelope_rect(period) : _; Where: period : sets the averaging frame in secs","title":"Usage"},{"location":"libs/analyzers/#anrms_envelope_tau","text":"Root mean square with one-pole lowpass and tau response. (See filters.lib.)","title":"(an.)rms_envelope_tau"},{"location":"libs/analyzers/#usage_12","text":"_ : rms_envelope_tau(period) : _; Where: period : (time to decay by 1/e) sets the averaging frame in secs","title":"Usage"},{"location":"libs/analyzers/#anrms_envelope_t60","text":"Root mean square with one-pole lowpass and t60 response. (See filters.lib.)","title":"(an.)rms_envelope_t60"},{"location":"libs/analyzers/#usage_13","text":"_ : rms_envelope_t60(period) : _; Where: period : (time to decay by 60 dB) sets the averaging frame in secs","title":"Usage"},{"location":"libs/analyzers/#anrms_envelope_t19","text":"Root mean square with one-pole lowpass and t19 response. (See filters.lib.)","title":"(an.)rms_envelope_t19"},{"location":"libs/analyzers/#usage_14","text":"_ : rms_envelope_t19(period) : _; Where: period : (time to decay by 1/e^2.2) sets the averaging frame in secs","title":"Usage"},{"location":"libs/analyzers/#anzcr","text":"Zero-crossing rate (ZCR) with one-pole lowpass averaging based on the tau constant. It outputs an index between 0 and 1 at a desired analysis frame. The ZCR of a signal correlates with the noisiness [Gouyon et al. 2000] and the spectral centroid [Herrera-Boyer et al. 2006] of a signal. For sinusoidal signals, the ZCR can be multiplied by ma.SR/2 and used as a frequency detector. For example, it can be deployed as a computationally efficient adaptive mechanism for automatic Larsen suppression.","title":"(an.)zcr"},{"location":"libs/analyzers/#usage_15","text":"_ : zcr(tau) : _; Where: tau : (time to decay by e^-1) sets the averaging frame in seconds.","title":"Usage"},{"location":"libs/analyzers/#spectrum-analyzers","text":"Spectrum-analyzers split the input signal into a bank of parallel signals, one for each spectral band. They are related to the Mth-Octave Filter-Banks in filters.lib . The documentation of this library contains more details about the implementation. The parameters are: M : number of band-slices per octave (>1) N : total number of bands (>2) ftop = upper bandlimit of the Mth-octave bands ( 4 Where: l : list of elements (ba.)take Take an element from a list. take is a standard Faust function. Usage take(P,l) take(3,(10,20,30,40)) -> 30 Where: P : position (int, known at compile time, P > 0) l : list of elements (ba.)subseq Extract a part of a list. Usage subseq(l, p, n) subseq((10,20,30,40,50,60), 1, 3) -> (20,30,40) subseq((10,20,30,40,50,60), 4, 1) -> 50 Where: l : list p : start point (0: begin of list) n : number of elements Note: Faust doesn't have proper lists. Lists are simulated with parallel compositions and there is no empty list. Selectors (Conditions) (ba.)if if-then-else implemented with a select2. WARNING: since select2 is strict (always evaluating both branches), the resulting if does not have the usual \"lazy\" semantic of the C if form, and thus cannot be used to protect against forbidden computations like division-by-zero for instance. Usage if(cond, then, else) : _ Where: cond : condition then : signal selected while cond is true else : signal selected while cond is false (ba.)selector Selects the ith input among n at compile time. Usage selector(I,N) _,_,_,_ : selector(2,4) : _ // selects the 3rd input among 4 Where: I : input to select (int, numbered from 0, known at compile time) N : number of inputs (int, known at compile time, N > I) There is also cselector for selecting among complex input signals of the form (real,imag). (ba.)select2stereo Select between 2 stereo signals. Usage _,_,_,_ : select2stereo(bpc) : _,_ Where: bpc : the selector switch (0/1) (ba.)selectn Selects the ith input among N at run time. Usage selectn(N,i) _,_,_,_ : selectn(4,2) : _ // selects the 3rd input among 4 Where: N : number of inputs (int, known at compile time, N > 0) i : input to select (int, numbered from 0) Example test program N = 64; process = par(n, N, (par(i,N,i) : selectn(N,n))); (ba.)selectmulti Selects the ith circuit among N at run time (all should have the same number of inputs and outputs) with a crossfade. Usage selectmulti(n,lgen,id) Where: n : crossfade in samples lgen : list of circuits id : circuit to select (int, numbered from 0) Example test program process = selectmulti(ma.SR/10, ((3,9),(2,8),(5,7)), nentry(\"choice\", 0, 0, 2, 1)); process = selectmulti(ma.SR/10, ((_*3,_*9),(_*2,_*8),(_*5,_*7)), nentry(\"choice\", 0, 0, 2, 1)); Other (ba.)latch Latch input on positive-going transition of \"clock\" (\"sample-and-hold\"). Usage _ : latch(clocksig) : _ Where: clocksig : hold trigger (0 for hold, 1 for bypass) (ba.)sAndH Sample And Hold. sAndH is a standard Faust function. Usage _ : sAndH(t) : _ Where: t : hold trigger (0 for hold, 1 for bypass) (ba.)downSample Down sample a signal. WARNING: this function doesn't change the rate of a signal, it just holds samples... downSample is a standard Faust function. Usage _ : downSample(freq) : _ Where: freq : new rate in Hz (ba.)peakhold Outputs current max value above zero. Usage _ : peakhold(mode) : _; Where: mode means: 1 - Track and hold max value. (ba.)peakholder Tracks abs peak and holds peak for 'n' samples. Usage _ : peakholder(n) : _; Where: n : number of samples (ba.)impulsify Turns a signal into an impulse with the value of the current sample (0.3,0.2,0.1 becomes 0.3,0.0,0.0). This function is typically used with a button to turn its output into an impulse. impulsify is a standard Faust function. Usage button(\"gate\") : impulsify; (ba.)automat Record and replay to the values the input signal in a loop. Usage hslider(...) : automat(bps, size, init) : _ (ba.)bpf bpf is an environment (a group of related definitions) that can be used to create break-point functions. It contains three functions: start(x,y) to start a break-point function end(x,y) to end a break-point function point(x,y) to add intermediate points to a break-point function A minimal break-point function must contain at least a start and an end point: f = bpf.start(x0,y0) : bpf.end(x1,y1); A more involved break-point function can contains any number of intermediate points: f = bpf.start(x0,y0) : bpf.point(x1,y1) : bpf.point(x2,y2) : bpf.end(x3,y3); In any case the x_{i} must be in increasing order (for all i , x_{i} < x_{i+1} ). For example the following definition: f = bpf.start(x0,y0) : ... : bpf.point(xi,yi) : ... : bpf.end(xn,yn); implements a break-point function f such that: f(x) = y_{0} when x < x_{0} f(x) = y_{n} when x > x_{n} f(x) = y_{i} + (y_{i+1}-y_{i})*(x-x_{i})/(x_{i+1}-x_{i}) when x_{i} <= x and x < x_{i+1} bpf is a standard Faust function. (ba.)listInterp Linearly interpolates between the elements of a list. Usage index = 1.69; // range is 0-4 process = listInterp((800,400,350,450,325),index); Where: index : the index (float) to interpolate between the different values. The range of index depends on the size of the list. (ba.)bypass1 Takes a mono input signal, route it to e and bypass it if bpc = 1 . When bypassed, e is feed with zeros so that its state is cleanup up. bypass1 is a standard Faust function. Usage _ : bypass1(bpc,e) : _ Where: bpc : bypass switch (0/1) e : a mono effect (ba.)bypass2 Takes a stereo input signal, route it to e and bypass it if bpc = 1 . When bypassed, e is feed with zeros so that its state is cleanup up. bypass2 is a standard Faust function. Usage _,_ : bypass2(bpc,e) : _,_ Where: bpc : bypass switch (0/1) e : a stereo effect (ba.)bypass1to2 Bypass switch for effect e having mono input signal and stereo output. Effect e is bypassed if bpc = 1 .When bypassed, e is feed with zeros so that its state is cleanup up. bypass1to2 is a standard Faust function. Usage _ : bypass1to2(bpc,e) : _,_ Where: bpc : bypass switch (0/1) e : a mono-to-stereo effect (ba.)bypass_fade Bypass an arbitrary (N x N) circuit with 'n' samples crossfade. Inputs and outputs signals are faded out when 'e' is bypassed, so that 'e' state is cleanup up. Once bypassed the effect is replaced by par(i,N,_). Bypassed circuits can be chained. Usage _ : bypass_fade(n,b,e) : _ or _,_ : bypass_fade(n,b,e) : _,_ n : number of samples for the crossfade b : bypass switch (0/1) e : N x N circuit Examples process = bypass_fade(ma.SR/10, checkbox(\"bypass echo\"), echo); process = bypass_fade(ma.SR/10, checkbox(\"bypass reverb\"), freeverb); (ba.)toggle Triggered by the change of 0 to 1, it toggles the output value between 0 and 1. Usage _ : toggle : _ Examples button(\"toggle\") : toggle : vbargraph(\"output\", 0, 1) (an.amp_follower(0.1) > 0.01) : toggle : vbargraph(\"output\", 0, 1) // takes audio input (ba.)on_and_off The first channel set the output to 1, the second channel to 0. Usage _ , _ : on_and_off : _ Example button(\"on\"), button(\"off\") : on_and_off : vbargraph(\"output\", 0, 1) (ba.)selectoutn Route input to the output among N at run time. Usage _ : selectoutn(N, i) : _,_,...N Where: N : number of outputs (int, known at compile time, N > 0) i : output number to route to (int, numbered from 0) (i.e. slider) Example process = 1 : selectoutn(3, sel) : par(i, 3, vbargraph(\"v.bargraph %i\", 0, 1)); sel = hslider(\"volume\", 0, 0, 2, 1) : int; Sliding Reduce Provides various operations on the last N samples using a high order `slidingReduce(op,N,maxN,disabledVal,x)`` fold-like function: slidingSum(n) : the sliding sum of the last n input samples, CPU-light slidingSump(n,maxn) : the sliding sum of the last n input samples, numerically stable \"forever\" slidingMax(n,maxn) : the sliding max of the last n input samples slidingMin(n,maxn) : the sliding min of the last n input samples slidingMean(n) : the sliding mean of the last n input samples, CPU-light slidingMeanp(n,maxn) : the sliding mean of the last n input samples, numerically stable \"forever\" slidingRMS(n) : the sliding RMS of the last n input samples, CPU-light slidingRMSp(n,maxn) : the sliding RMS of the last n input samples, numerically stable \"forever\" Working Principle If we want the maximum of the last 8 values, we can do that as: simpleMax(x) = ( ( max(x@0,x@1), max(x@2,x@3) ) :max ), ( ( max(x@4,x@5), max(x@6,x@7) ) :max ) :max; max(x@2,x@3) is the same as max(x@0,x@1)@2 but the latter re-uses a value we already computed,so is more efficient. Using the same trick for values 4 trough 7, we can write: efficientMax(x)= ( ( max(x@0,x@1), max(x@0,x@1)@2 ) :max ), ( ( max(x@0,x@1), max(x@0,x@1)@2 ) :max@4 ) :max; We can rewrite it recursively, so it becomes possible to get the maximum at have any number of values, as long as it's a power of 2. recursiveMax = case { (1,x) => x; (N,x) => max(recursiveMax(N/2,x), recursiveMax(N/2,x)@(N/2)); }; What if we want to look at a number of values that's not a power of 2? For each value, we will have to decide whether to use it or not. If N is bigger than the index of the value, we use it, otherwise we replace it with ( 0-(ma.INFINITY) ): variableMax(N,x) = max( max( ( (x@0 : useVal(0)), (x@1 : useVal(1)) ):max, ( (x@2 : useVal(2)), (x@3 : useVal(3)) ):max ), max( ( (x@4 : useVal(4)), (x@5 : useVal(5)) ):max, ( (x@6 : useVal(6)), (x@7 : useVal(7)) ):max ) ) with { useVal(i) = select2((N>=i) , (0-(ma.INFINITY)),_); }; Now it becomes impossible to re-use any values. To fix that let's first look at how we'd implement it using recursiveMax, but with a fixed N that is not a power of 2. For example, this is how you'd do it with N=3 : binaryMaxThree(x) = ( recursiveMax(1,x)@0, // the first x recursiveMax(2,x)@1 // the second and third x ):max; N=6 binaryMaxSix(x) = ( recursiveMax(2,x)@0, // first two recursiveMax(4,x)@2 // third trough sixth ):max; Note that recursiveMax(2,x) is used at a different delay then in binaryMaxThree , since it represents 1 and 2, not 2 and 3. Each block is delayed the combined size of the previous blocks. N=7 binaryMaxSeven(x) = ( ( recursiveMax(1,x)@0, // first x recursiveMax(2,x)@1 // second and third ):max, ( recursiveMax(4,x)@3 // fourth trough seventh ) ):max; To make a variable version, we need to know which powers of two are used, and at which delay time. Then it becomes a matter of: lining up all the different block sizes in parallel: the first par() statement delaying each the appropriate amount: sumOfPrevBlockSizes() turning it on or off: useVal() getting the maximum of all of them: combine() In Faust, we can only do that for a fixed maximum number of values: maxN variableBinaryMaxN(N,maxN,x) = par(i,maxNrBits,recursiveMax(pow2(i),x)@sumOfPrevBlockSizes(N,maxN,i) : useVal(i)) : combine(maxNrBits) with { // The sum of all the sizes of the previous blocks sumOfPrevBlockSizes(N,maxN,0) = 0; sumOfPrevBlockSizes(N,maxN,i) = (subseq((allBlockSizes(N,maxN)),0,i):>_); allBlockSizes(N,maxN) = par(i, maxNrBits, pow2(i) * isUsed(i) ); maxNrBits = int2nrOfBits(maxN); // get the maximum of all blocks combine(2) = max; combine(N) = max(combine(N-1),_); // Decide wether or not to use a certain value, based on N useVal(i) = select2(isUsed(i), (0-(ma.INFINITY)),_); isUsed(i) = take(i+1, (int2bin(N,maxN))); }; (ba.)slidingReduce Fold-like high order function. Apply a commutative binary operation to the last consecutive samples of a signal . For example : slidingReduce(max,128,128,-(ma.INFINITY)) will compute the maximum of the last 128 samples. The output is updated each sample, unlike reduce, where the output is constant for the duration of a block. Usage _ : slidingReduce(op,N,maxN,disabledVal) : _ Where: N : the number of values to process maxN : the maximum number of values to process, needs to be a power of 2 op : the operator. Needs to be a commutative one. disabledVal : the value to use when we want to ignore a value. In other words, op(x,disabledVal) should equal to x . For example, +(x,0) equals x and min(x,ma.INFINITY) equals x . So if we want to calculate the sum, we need to give 0 as disabledVal , and if we want the minimum, we need to give ma.INFINITY as disabledVal . (ba.)slidingSum The sliding sum of the last n input samples. It will eventually run into numerical trouble when there is a persistent dc component. If that matters in your application, use the more CPU-intensive (ba.)slidingSump. Usage _ : slidingSum(N) : _ Where: N : the number of values to process (ba.)slidingSump The sliding sum of the last n input samples. It uses a lot more CPU then (ba.)slidingSum(n,maxn), but is numerically stable \"forever\" in return. Usage _ : slidingSump(N,maxN) : _ Where: N : the number of values to process maxN : the maximum number of values to process, needs to be a power of 2 (ba.)slidingMax The sliding maximum of the last n input samples. Usage _ : slidingMax(N,maxN) : _ Where: N : the number of values to process maxN : the maximum number of values to process, needs to be a power of 2 (ba.)slidingMin The sliding minimum of the last n input samples. Usage _ : slidingMin(N,maxN) : _ Where: N : the number of values to process maxN : the maximum number of values to process, needs to be a power of 2 (ba.)slidingMean The sliding mean of the last n input samples. It will eventually run into numerical trouble when there is a persistent dc component. If that matters in your application, use the more CPU-intensive (ba.)slidinRMSp. Usage _ : slidingMean(N,maxN) : _ Where: N : the number of values to process (ba.)slidingMeanp The sliding mean of the last n input samples. It uses a lot more CPU then (ba.)slidingMean(n,maxn), but is numerically stable \"forever\" in return. Usage _ : slidingMeanp(N,maxN) : _ Where: N : the number of values to process maxN : the maximum number of values to process, needs to be a power of 2 (ba.)slidingRMS The root mean square of the last n input samples. It will eventually run into numerical trouble when there is a persistent dc component. If that matters in your application, use the more CPU-intensive (ba.)slidinRMSp. Usage _ : slidingRMS(N) : _ Where: N : the number of values to process (ba.)slidingRMSp The root mean square of the last n input samples. It uses a lot more CPU then (ba.)slidingRMS(n,maxn), but is numerically stable \"forever\" in return. Usage _ : slidingRMSp(N,maxN) : _ Where: N : the number of values to process maxN : the maximum number of values to process, needs to be a power of 2 Parallel Operator Provides various operations on N parallel inputs using a high order parallelOp(op,N,x) function: parallelMax(n) : the max of n parallel inputs parallelMin(n) : the min of n parallel inputs parallelMean(n) : the mean of n parallel inputs parallelRMS(n) : the RMS of n parallel inputs (ba.)parallelOp Apply a commutative binary operation to N parallel inputs. usage si.bus(n) : parallelOp(op,n) : _ where: N : the number of parallel inputs known at compile time op : the operator which needs to be commutative (ba.)parallelMax The maximum of N parallel inputs. Usage si.bus(n) : parallelMax(n) : _ Where: N : the number of parallel inputs known at compile time (ba.)parallelMin The minimum of N parallel inputs. Usage si.bus(n) : parallelMin(n) : _ Where: N : the number of parallel inputs known at compile time (ba.)parallelMean The mean of N parallel inputs. Usage si.bus(n) : parallelMean(n) : _ Where: N : the number of parallel inputs known at compile time (ba.)parallelRMS The RMS of N parallel inputs. Usage si.bus(n) : parallelRMS(n) : _ Where: N : the number of parallel inputs known at compile time","title":" basics "},{"location":"libs/basics/#basicslib","text":"A library of basic elements. Its official prefix is ba .","title":"basics.lib"},{"location":"libs/basics/#conversion-tools","text":"","title":"Conversion Tools"},{"location":"libs/basics/#basamp2sec","text":"Converts a number of samples to a duration in seconds. samp2sec is a standard Faust function.","title":"(ba.)samp2sec"},{"location":"libs/basics/#usage","text":"samp2sec(n) : _ Where: n : number of samples","title":"Usage"},{"location":"libs/basics/#basec2samp","text":"Converts a duration in seconds to a number of samples. samp2sec is a standard Faust function.","title":"(ba.)sec2samp"},{"location":"libs/basics/#usage_1","text":"sec2samp(d) : _ Where: d : duration in seconds","title":"Usage"},{"location":"libs/basics/#badb2linear","text":"Converts a loudness in dB to a linear gain (0-1). db2linear is a standard Faust function.","title":"(ba.)db2linear"},{"location":"libs/basics/#usage_2","text":"db2linear(l) : _ Where: l : loudness in dB","title":"Usage"},{"location":"libs/basics/#balinear2db","text":"Converts a linear gain (0-1) to a loudness in dB. linear2db is a standard Faust function.","title":"(ba.)linear2db"},{"location":"libs/basics/#usage_3","text":"linear2db(g) : _ Where: g : a linear gain","title":"Usage"},{"location":"libs/basics/#balin2loggain","text":"Converts a linear gain (0-1) to a log gain (0-1).","title":"(ba.)lin2LogGain"},{"location":"libs/basics/#usage_4","text":"lin2LogGain(n) : _","title":"Usage"},{"location":"libs/basics/#balog2lingain","text":"Converts a log gain (0-1) to a linear gain (0-1).","title":"(ba.)log2LinGain"},{"location":"libs/basics/#usage_5","text":"log2LinGain(n) : _","title":"Usage"},{"location":"libs/basics/#batau2pole","text":"Returns a real pole giving exponential decay. Note that t60 (time to decay 60 dB) is ~6.91 time constants. tau2pole is a standard Faust function.","title":"(ba.)tau2pole"},{"location":"libs/basics/#usage_6","text":"_ : smooth(tau2pole(tau)) : _ Where: tau : time-constant in seconds","title":"Usage"},{"location":"libs/basics/#bapole2tau","text":"Returns the time-constant, in seconds, corresponding to the given real, positive pole in (0,1). pole2tau is a standard Faust function.","title":"(ba.)pole2tau"},{"location":"libs/basics/#usage_7","text":"pole2tau(pole) : _ Where: pole : the pole","title":"Usage"},{"location":"libs/basics/#bamidikey2hz","text":"Converts a MIDI key number to a frequency in Hz (MIDI key 69 = A440). midikey2hz is a standard Faust function.","title":"(ba.)midikey2hz"},{"location":"libs/basics/#usage_8","text":"midikey2hz(mk) : _ Where: mk : the MIDI key number","title":"Usage"},{"location":"libs/basics/#bahz2midikey","text":"Converts a frequency in Hz to a MIDI key number (MIDI key 69 = A440). hz2midikey is a standard Faust function.","title":"(ba.)hz2midikey"},{"location":"libs/basics/#usage_9","text":"hz2midikey(f) : _ Where: f : frequency in Hz","title":"Usage"},{"location":"libs/basics/#basemi2ratio","text":"Converts semitones in a frequency multiplicative ratio. semi2ratio is a standard Faust function.","title":"(ba.)semi2ratio"},{"location":"libs/basics/#usage_10","text":"semi2ratio(semi) : _ Where: semi : number of semitone","title":"Usage"},{"location":"libs/basics/#baratio2semi","text":"Converts a frequency multiplicative ratio in semitones. ratio2semi is a standard Faust function.","title":"(ba.)ratio2semi"},{"location":"libs/basics/#usage_11","text":"ratio2semi(ratio) : _ Where: ratio : frequency multiplicative ratio","title":"Usage"},{"location":"libs/basics/#bapianokey2hz","text":"Converts a piano key number to a frequency in Hz (piano key 49 = A440).","title":"(ba.)pianokey2hz"},{"location":"libs/basics/#usage_12","text":"pianokey2hz(pk) : _ Where: pk : the piano key number","title":"Usage"},{"location":"libs/basics/#bahz2pianokey","text":"Converts a frequency in Hz to a piano key number (piano key 49 = A440).","title":"(ba.)hz2pianokey"},{"location":"libs/basics/#usage_13","text":"hz2pianokey(f) : _ Where: f : frequency in Hz","title":"Usage"},{"location":"libs/basics/#counters-and-timetempo-tools","text":"","title":"Counters and Time/Tempo Tools"},{"location":"libs/basics/#bacountdown","text":"Starts counting down from n included to 0. While trig is 1 the output is n. The countdown starts with the transition of trig from 1 to 0. At the end of the countdown the output value will remain at 0 until the next trig. countdown is a standard Faust function.","title":"(ba.)countdown"},{"location":"libs/basics/#usage_14","text":"countdown(n,trig) : _ Where: n : the starting point of the countdown trig : the trigger signal (1: start at n ; 0: decrease until 0)","title":"Usage"},{"location":"libs/basics/#bacountup","text":"Starts counting up from 0 to n included. While trig is 1 the output is 0. The countup starts with the transition of trig from 1 to 0. At the end of the countup the output value will remain at n until the next trig. countup is a standard Faust function.","title":"(ba.)countup"},{"location":"libs/basics/#usage_15","text":"countup(n,trig) : _ Where: n : the maximum count value trig : the trigger signal (1: start at 0; 0: increase until n )","title":"Usage"},{"location":"libs/basics/#basweep","text":"Counts from 0 to period-1 repeatedly, generating a sawtooth waveform, like os.lf_rawsaw, starting at 1 when run transitions from 0 to 1. Outputs zero while run is 0.","title":"(ba.)sweep"},{"location":"libs/basics/#usage_16","text":"sweep(period,run) : _","title":"Usage"},{"location":"libs/basics/#batime","text":"A simple timer that counts every samples from the beginning of the process. time is a standard Faust function.","title":"(ba.)time"},{"location":"libs/basics/#usage_17","text":"time : _","title":"Usage"},{"location":"libs/basics/#baramp","text":"An linear ramp of 'n' samples to reach the next value","title":"(ba.)ramp"},{"location":"libs/basics/#usage_18","text":"_ : ramp(n) : _ Where: n : number of samples to reach the next value","title":"Usage"},{"location":"libs/basics/#batempo","text":"Converts a tempo in BPM into a number of samples.","title":"(ba.)tempo"},{"location":"libs/basics/#usage_19","text":"tempo(t) : _ Where: t : tempo in BPM","title":"Usage"},{"location":"libs/basics/#baperiod","text":"Basic sawtooth wave of period p .","title":"(ba.)period"},{"location":"libs/basics/#usage_20","text":"period(p) : _ Where: p : period as a number of samples","title":"Usage"},{"location":"libs/basics/#bapulse","text":"Pulses (10000) generated at period p .","title":"(ba.)pulse"},{"location":"libs/basics/#usage_21","text":"pulse(p) : _ Where: p : period as a number of samples","title":"Usage"},{"location":"libs/basics/#bapulsen","text":"Pulses (11110000) of length n generated at period p .","title":"(ba.)pulsen"},{"location":"libs/basics/#usage_22","text":"pulsen(n,p) : _ Where: n : pulse length as a number of samples p : period as a number of samples","title":"Usage"},{"location":"libs/basics/#bacycle","text":"Split nonzero input values into n cycles.","title":"(ba.)cycle"},{"location":"libs/basics/#usage_23","text":"_ : cycle(n) <: Where: n : the number of cycles/output signals","title":"Usage"},{"location":"libs/basics/#babeat","text":"Pulses at tempo t . beat is a standard Faust function.","title":"(ba.)beat"},{"location":"libs/basics/#usage_24","text":"beat(t) : _ Where: t : tempo in BPM","title":"Usage"},{"location":"libs/basics/#bapulse_countup","text":"Starts counting up pulses. While trig is 1 the output is counting up, while trig is 0 the counter is reset to 0.","title":"(ba.)pulse_countup"},{"location":"libs/basics/#usage_25","text":"_ : pulse_countup(trig) : _ Where: trig : the trigger signal (1: start at next pulse; 0: reset to 0)","title":"Usage"},{"location":"libs/basics/#bapulse_countdown","text":"Starts counting down pulses. While trig is 1 the output is counting down, while trig is 0 the counter is reset to 0.","title":"(ba.)pulse_countdown"},{"location":"libs/basics/#usage_26","text":"_ : pulse_countdown(trig) : _ Where: trig : the trigger signal (1: start at next pulse; 0: reset to 0)","title":"Usage"},{"location":"libs/basics/#bapulse_countup_loop","text":"Starts counting up pulses from 0 to n included. While trig is 1 the output is counting up, while trig is 0 the counter is reset to 0. At the end of the countup (n) the output value will be reset to 0.","title":"(ba.)pulse_countup_loop"},{"location":"libs/basics/#usage_27","text":"_ : pulse_countup_loop(n,trig) : _ Where: n : the highest number of the countup (included) before reset to 0 trig : the trigger signal (1: start at next pulse; 0: reset to 0)","title":"Usage"},{"location":"libs/basics/#baresetctr","text":"Function that lets through the mth impulse out of each consecutive group of n impulses.","title":"(ba.)resetCtr"},{"location":"libs/basics/#usage_28","text":"_ : resetCtr(n,m) : _ Where: n : the total number of impulses being split m : index of impulse to allow to be output","title":"Usage"},{"location":"libs/basics/#bapulse_countdown_loop","text":"Starts counting down pulses from 0 to n included. While trig is 1 the output is counting down, while trig is 0 the counter is reset to 0. At the end of the countdown (n) the output value will be reset to 0.","title":"(ba.)pulse_countdown_loop"},{"location":"libs/basics/#usage_29","text":"_ : pulse_countdown_loop(n,trig) : _ Where: n : the highest number of the countup (included) before reset to 0 trig : the trigger signal (1: start at next pulse; 0: reset to 0)","title":"Usage"},{"location":"libs/basics/#array-processingpattern-matching","text":"","title":"Array Processing/Pattern Matching"},{"location":"libs/basics/#bacount","text":"Count the number of elements of list l. count is a standard Faust function.","title":"(ba.)count"},{"location":"libs/basics/#usage_30","text":"count(l) count((10,20,30,40)) -> 4 Where: l : list of elements","title":"Usage"},{"location":"libs/basics/#batake","text":"Take an element from a list. take is a standard Faust function.","title":"(ba.)take"},{"location":"libs/basics/#usage_31","text":"take(P,l) take(3,(10,20,30,40)) -> 30 Where: P : position (int, known at compile time, P > 0) l : list of elements","title":"Usage"},{"location":"libs/basics/#basubseq","text":"Extract a part of a list.","title":"(ba.)subseq"},{"location":"libs/basics/#usage_32","text":"subseq(l, p, n) subseq((10,20,30,40,50,60), 1, 3) -> (20,30,40) subseq((10,20,30,40,50,60), 4, 1) -> 50 Where: l : list p : start point (0: begin of list) n : number of elements","title":"Usage"},{"location":"libs/basics/#note","text":"Faust doesn't have proper lists. Lists are simulated with parallel compositions and there is no empty list.","title":"Note:"},{"location":"libs/basics/#selectors-conditions","text":"","title":"Selectors (Conditions)"},{"location":"libs/basics/#baif","text":"if-then-else implemented with a select2. WARNING: since select2 is strict (always evaluating both branches), the resulting if does not have the usual \"lazy\" semantic of the C if form, and thus cannot be used to protect against forbidden computations like division-by-zero for instance.","title":"(ba.)if"},{"location":"libs/basics/#usage_33","text":"if(cond, then, else) : _ Where: cond : condition then : signal selected while cond is true else : signal selected while cond is false","title":"Usage"},{"location":"libs/basics/#baselector","text":"Selects the ith input among n at compile time.","title":"(ba.)selector"},{"location":"libs/basics/#usage_34","text":"selector(I,N) _,_,_,_ : selector(2,4) : _ // selects the 3rd input among 4 Where: I : input to select (int, numbered from 0, known at compile time) N : number of inputs (int, known at compile time, N > I) There is also cselector for selecting among complex input signals of the form (real,imag).","title":"Usage"},{"location":"libs/basics/#baselect2stereo","text":"Select between 2 stereo signals.","title":"(ba.)select2stereo"},{"location":"libs/basics/#usage_35","text":"_,_,_,_ : select2stereo(bpc) : _,_ Where: bpc : the selector switch (0/1)","title":"Usage"},{"location":"libs/basics/#baselectn","text":"Selects the ith input among N at run time.","title":"(ba.)selectn"},{"location":"libs/basics/#usage_36","text":"selectn(N,i) _,_,_,_ : selectn(4,2) : _ // selects the 3rd input among 4 Where: N : number of inputs (int, known at compile time, N > 0) i : input to select (int, numbered from 0)","title":"Usage"},{"location":"libs/basics/#example-test-program","text":"N = 64; process = par(n, N, (par(i,N,i) : selectn(N,n)));","title":"Example test program"},{"location":"libs/basics/#baselectmulti","text":"Selects the ith circuit among N at run time (all should have the same number of inputs and outputs) with a crossfade.","title":"(ba.)selectmulti"},{"location":"libs/basics/#usage_37","text":"selectmulti(n,lgen,id) Where: n : crossfade in samples lgen : list of circuits id : circuit to select (int, numbered from 0)","title":"Usage"},{"location":"libs/basics/#example-test-program_1","text":"process = selectmulti(ma.SR/10, ((3,9),(2,8),(5,7)), nentry(\"choice\", 0, 0, 2, 1)); process = selectmulti(ma.SR/10, ((_*3,_*9),(_*2,_*8),(_*5,_*7)), nentry(\"choice\", 0, 0, 2, 1));","title":"Example test program"},{"location":"libs/basics/#other","text":"","title":"Other"},{"location":"libs/basics/#balatch","text":"Latch input on positive-going transition of \"clock\" (\"sample-and-hold\").","title":"(ba.)latch"},{"location":"libs/basics/#usage_38","text":"_ : latch(clocksig) : _ Where: clocksig : hold trigger (0 for hold, 1 for bypass)","title":"Usage"},{"location":"libs/basics/#basandh","text":"Sample And Hold. sAndH is a standard Faust function.","title":"(ba.)sAndH"},{"location":"libs/basics/#usage_39","text":"_ : sAndH(t) : _ Where: t : hold trigger (0 for hold, 1 for bypass)","title":"Usage"},{"location":"libs/basics/#badownsample","text":"Down sample a signal. WARNING: this function doesn't change the rate of a signal, it just holds samples... downSample is a standard Faust function.","title":"(ba.)downSample"},{"location":"libs/basics/#usage_40","text":"_ : downSample(freq) : _ Where: freq : new rate in Hz","title":"Usage"},{"location":"libs/basics/#bapeakhold","text":"Outputs current max value above zero.","title":"(ba.)peakhold"},{"location":"libs/basics/#usage_41","text":"_ : peakhold(mode) : _; Where: mode means: 1 - Track and hold max value.","title":"Usage"},{"location":"libs/basics/#bapeakholder","text":"Tracks abs peak and holds peak for 'n' samples.","title":"(ba.)peakholder"},{"location":"libs/basics/#usage_42","text":"_ : peakholder(n) : _; Where: n : number of samples","title":"Usage"},{"location":"libs/basics/#baimpulsify","text":"Turns a signal into an impulse with the value of the current sample (0.3,0.2,0.1 becomes 0.3,0.0,0.0). This function is typically used with a button to turn its output into an impulse. impulsify is a standard Faust function.","title":"(ba.)impulsify"},{"location":"libs/basics/#usage_43","text":"button(\"gate\") : impulsify;","title":"Usage"},{"location":"libs/basics/#baautomat","text":"Record and replay to the values the input signal in a loop.","title":"(ba.)automat"},{"location":"libs/basics/#usage_44","text":"hslider(...) : automat(bps, size, init) : _","title":"Usage"},{"location":"libs/basics/#babpf","text":"bpf is an environment (a group of related definitions) that can be used to create break-point functions. It contains three functions: start(x,y) to start a break-point function end(x,y) to end a break-point function point(x,y) to add intermediate points to a break-point function A minimal break-point function must contain at least a start and an end point: f = bpf.start(x0,y0) : bpf.end(x1,y1); A more involved break-point function can contains any number of intermediate points: f = bpf.start(x0,y0) : bpf.point(x1,y1) : bpf.point(x2,y2) : bpf.end(x3,y3); In any case the x_{i} must be in increasing order (for all i , x_{i} < x_{i+1} ). For example the following definition: f = bpf.start(x0,y0) : ... : bpf.point(xi,yi) : ... : bpf.end(xn,yn); implements a break-point function f such that: f(x) = y_{0} when x < x_{0} f(x) = y_{n} when x > x_{n} f(x) = y_{i} + (y_{i+1}-y_{i})*(x-x_{i})/(x_{i+1}-x_{i}) when x_{i} <= x and x < x_{i+1} bpf is a standard Faust function.","title":"(ba.)bpf"},{"location":"libs/basics/#balistinterp","text":"Linearly interpolates between the elements of a list.","title":"(ba.)listInterp"},{"location":"libs/basics/#usage_45","text":"index = 1.69; // range is 0-4 process = listInterp((800,400,350,450,325),index); Where: index : the index (float) to interpolate between the different values. The range of index depends on the size of the list.","title":"Usage"},{"location":"libs/basics/#babypass1","text":"Takes a mono input signal, route it to e and bypass it if bpc = 1 . When bypassed, e is feed with zeros so that its state is cleanup up. bypass1 is a standard Faust function.","title":"(ba.)bypass1"},{"location":"libs/basics/#usage_46","text":"_ : bypass1(bpc,e) : _ Where: bpc : bypass switch (0/1) e : a mono effect","title":"Usage"},{"location":"libs/basics/#babypass2","text":"Takes a stereo input signal, route it to e and bypass it if bpc = 1 . When bypassed, e is feed with zeros so that its state is cleanup up. bypass2 is a standard Faust function.","title":"(ba.)bypass2"},{"location":"libs/basics/#usage_47","text":"_,_ : bypass2(bpc,e) : _,_ Where: bpc : bypass switch (0/1) e : a stereo effect","title":"Usage"},{"location":"libs/basics/#babypass1to2","text":"Bypass switch for effect e having mono input signal and stereo output. Effect e is bypassed if bpc = 1 .When bypassed, e is feed with zeros so that its state is cleanup up. bypass1to2 is a standard Faust function.","title":"(ba.)bypass1to2"},{"location":"libs/basics/#usage_48","text":"_ : bypass1to2(bpc,e) : _,_ Where: bpc : bypass switch (0/1) e : a mono-to-stereo effect","title":"Usage"},{"location":"libs/basics/#babypass_fade","text":"Bypass an arbitrary (N x N) circuit with 'n' samples crossfade. Inputs and outputs signals are faded out when 'e' is bypassed, so that 'e' state is cleanup up. Once bypassed the effect is replaced by par(i,N,_). Bypassed circuits can be chained.","title":"(ba.)bypass_fade"},{"location":"libs/basics/#usage_49","text":"_ : bypass_fade(n,b,e) : _ or _,_ : bypass_fade(n,b,e) : _,_ n : number of samples for the crossfade b : bypass switch (0/1) e : N x N circuit","title":"Usage"},{"location":"libs/basics/#examples","text":"process = bypass_fade(ma.SR/10, checkbox(\"bypass echo\"), echo); process = bypass_fade(ma.SR/10, checkbox(\"bypass reverb\"), freeverb);","title":"Examples"},{"location":"libs/basics/#batoggle","text":"Triggered by the change of 0 to 1, it toggles the output value between 0 and 1.","title":"(ba.)toggle"},{"location":"libs/basics/#usage_50","text":"_ : toggle : _","title":"Usage"},{"location":"libs/basics/#examples_1","text":"button(\"toggle\") : toggle : vbargraph(\"output\", 0, 1) (an.amp_follower(0.1) > 0.01) : toggle : vbargraph(\"output\", 0, 1) // takes audio input","title":"Examples"},{"location":"libs/basics/#baon_and_off","text":"The first channel set the output to 1, the second channel to 0.","title":"(ba.)on_and_off"},{"location":"libs/basics/#usage_51","text":"_ , _ : on_and_off : _","title":"Usage"},{"location":"libs/basics/#example","text":"button(\"on\"), button(\"off\") : on_and_off : vbargraph(\"output\", 0, 1)","title":"Example"},{"location":"libs/basics/#baselectoutn","text":"Route input to the output among N at run time.","title":"(ba.)selectoutn"},{"location":"libs/basics/#usage_52","text":"_ : selectoutn(N, i) : _,_,...N Where: N : number of outputs (int, known at compile time, N > 0) i : output number to route to (int, numbered from 0) (i.e. slider)","title":"Usage"},{"location":"libs/basics/#example_1","text":"process = 1 : selectoutn(3, sel) : par(i, 3, vbargraph(\"v.bargraph %i\", 0, 1)); sel = hslider(\"volume\", 0, 0, 2, 1) : int;","title":"Example"},{"location":"libs/basics/#sliding-reduce","text":"Provides various operations on the last N samples using a high order `slidingReduce(op,N,maxN,disabledVal,x)`` fold-like function: slidingSum(n) : the sliding sum of the last n input samples, CPU-light slidingSump(n,maxn) : the sliding sum of the last n input samples, numerically stable \"forever\" slidingMax(n,maxn) : the sliding max of the last n input samples slidingMin(n,maxn) : the sliding min of the last n input samples slidingMean(n) : the sliding mean of the last n input samples, CPU-light slidingMeanp(n,maxn) : the sliding mean of the last n input samples, numerically stable \"forever\" slidingRMS(n) : the sliding RMS of the last n input samples, CPU-light slidingRMSp(n,maxn) : the sliding RMS of the last n input samples, numerically stable \"forever\"","title":"Sliding Reduce"},{"location":"libs/basics/#working-principle","text":"If we want the maximum of the last 8 values, we can do that as: simpleMax(x) = ( ( max(x@0,x@1), max(x@2,x@3) ) :max ), ( ( max(x@4,x@5), max(x@6,x@7) ) :max ) :max; max(x@2,x@3) is the same as max(x@0,x@1)@2 but the latter re-uses a value we already computed,so is more efficient. Using the same trick for values 4 trough 7, we can write: efficientMax(x)= ( ( max(x@0,x@1), max(x@0,x@1)@2 ) :max ), ( ( max(x@0,x@1), max(x@0,x@1)@2 ) :max@4 ) :max; We can rewrite it recursively, so it becomes possible to get the maximum at have any number of values, as long as it's a power of 2. recursiveMax = case { (1,x) => x; (N,x) => max(recursiveMax(N/2,x), recursiveMax(N/2,x)@(N/2)); }; What if we want to look at a number of values that's not a power of 2? For each value, we will have to decide whether to use it or not. If N is bigger than the index of the value, we use it, otherwise we replace it with ( 0-(ma.INFINITY) ): variableMax(N,x) = max( max( ( (x@0 : useVal(0)), (x@1 : useVal(1)) ):max, ( (x@2 : useVal(2)), (x@3 : useVal(3)) ):max ), max( ( (x@4 : useVal(4)), (x@5 : useVal(5)) ):max, ( (x@6 : useVal(6)), (x@7 : useVal(7)) ):max ) ) with { useVal(i) = select2((N>=i) , (0-(ma.INFINITY)),_); }; Now it becomes impossible to re-use any values. To fix that let's first look at how we'd implement it using recursiveMax, but with a fixed N that is not a power of 2. For example, this is how you'd do it with N=3 : binaryMaxThree(x) = ( recursiveMax(1,x)@0, // the first x recursiveMax(2,x)@1 // the second and third x ):max; N=6 binaryMaxSix(x) = ( recursiveMax(2,x)@0, // first two recursiveMax(4,x)@2 // third trough sixth ):max; Note that recursiveMax(2,x) is used at a different delay then in binaryMaxThree , since it represents 1 and 2, not 2 and 3. Each block is delayed the combined size of the previous blocks. N=7 binaryMaxSeven(x) = ( ( recursiveMax(1,x)@0, // first x recursiveMax(2,x)@1 // second and third ):max, ( recursiveMax(4,x)@3 // fourth trough seventh ) ):max; To make a variable version, we need to know which powers of two are used, and at which delay time. Then it becomes a matter of: lining up all the different block sizes in parallel: the first par() statement delaying each the appropriate amount: sumOfPrevBlockSizes() turning it on or off: useVal() getting the maximum of all of them: combine() In Faust, we can only do that for a fixed maximum number of values: maxN variableBinaryMaxN(N,maxN,x) = par(i,maxNrBits,recursiveMax(pow2(i),x)@sumOfPrevBlockSizes(N,maxN,i) : useVal(i)) : combine(maxNrBits) with { // The sum of all the sizes of the previous blocks sumOfPrevBlockSizes(N,maxN,0) = 0; sumOfPrevBlockSizes(N,maxN,i) = (subseq((allBlockSizes(N,maxN)),0,i):>_); allBlockSizes(N,maxN) = par(i, maxNrBits, pow2(i) * isUsed(i) ); maxNrBits = int2nrOfBits(maxN); // get the maximum of all blocks combine(2) = max; combine(N) = max(combine(N-1),_); // Decide wether or not to use a certain value, based on N useVal(i) = select2(isUsed(i), (0-(ma.INFINITY)),_); isUsed(i) = take(i+1, (int2bin(N,maxN))); };","title":"Working Principle"},{"location":"libs/basics/#baslidingreduce","text":"Fold-like high order function. Apply a commutative binary operation to the last consecutive samples of a signal . For example : slidingReduce(max,128,128,-(ma.INFINITY)) will compute the maximum of the last 128 samples. The output is updated each sample, unlike reduce, where the output is constant for the duration of a block.","title":"(ba.)slidingReduce"},{"location":"libs/basics/#usage_53","text":"_ : slidingReduce(op,N,maxN,disabledVal) : _ Where: N : the number of values to process maxN : the maximum number of values to process, needs to be a power of 2 op : the operator. Needs to be a commutative one. disabledVal : the value to use when we want to ignore a value. In other words, op(x,disabledVal) should equal to x . For example, +(x,0) equals x and min(x,ma.INFINITY) equals x . So if we want to calculate the sum, we need to give 0 as disabledVal , and if we want the minimum, we need to give ma.INFINITY as disabledVal .","title":"Usage"},{"location":"libs/basics/#baslidingsum","text":"The sliding sum of the last n input samples. It will eventually run into numerical trouble when there is a persistent dc component. If that matters in your application, use the more CPU-intensive (ba.)slidingSump.","title":"(ba.)slidingSum"},{"location":"libs/basics/#usage_54","text":"_ : slidingSum(N) : _ Where: N : the number of values to process","title":"Usage"},{"location":"libs/basics/#baslidingsump","text":"The sliding sum of the last n input samples. It uses a lot more CPU then (ba.)slidingSum(n,maxn), but is numerically stable \"forever\" in return.","title":"(ba.)slidingSump"},{"location":"libs/basics/#usage_55","text":"_ : slidingSump(N,maxN) : _ Where: N : the number of values to process maxN : the maximum number of values to process, needs to be a power of 2","title":"Usage"},{"location":"libs/basics/#baslidingmax","text":"The sliding maximum of the last n input samples.","title":"(ba.)slidingMax"},{"location":"libs/basics/#usage_56","text":"_ : slidingMax(N,maxN) : _ Where: N : the number of values to process maxN : the maximum number of values to process, needs to be a power of 2","title":"Usage"},{"location":"libs/basics/#baslidingmin","text":"The sliding minimum of the last n input samples.","title":"(ba.)slidingMin"},{"location":"libs/basics/#usage_57","text":"_ : slidingMin(N,maxN) : _ Where: N : the number of values to process maxN : the maximum number of values to process, needs to be a power of 2","title":"Usage"},{"location":"libs/basics/#baslidingmean","text":"The sliding mean of the last n input samples. It will eventually run into numerical trouble when there is a persistent dc component. If that matters in your application, use the more CPU-intensive (ba.)slidinRMSp.","title":"(ba.)slidingMean"},{"location":"libs/basics/#usage_58","text":"_ : slidingMean(N,maxN) : _ Where: N : the number of values to process","title":"Usage"},{"location":"libs/basics/#baslidingmeanp","text":"The sliding mean of the last n input samples. It uses a lot more CPU then (ba.)slidingMean(n,maxn), but is numerically stable \"forever\" in return.","title":"(ba.)slidingMeanp"},{"location":"libs/basics/#usage_59","text":"_ : slidingMeanp(N,maxN) : _ Where: N : the number of values to process maxN : the maximum number of values to process, needs to be a power of 2","title":"Usage"},{"location":"libs/basics/#baslidingrms","text":"The root mean square of the last n input samples. It will eventually run into numerical trouble when there is a persistent dc component. If that matters in your application, use the more CPU-intensive (ba.)slidinRMSp.","title":"(ba.)slidingRMS"},{"location":"libs/basics/#usage_60","text":"_ : slidingRMS(N) : _ Where: N : the number of values to process","title":"Usage"},{"location":"libs/basics/#baslidingrmsp","text":"The root mean square of the last n input samples. It uses a lot more CPU then (ba.)slidingRMS(n,maxn), but is numerically stable \"forever\" in return.","title":"(ba.)slidingRMSp"},{"location":"libs/basics/#usage_61","text":"_ : slidingRMSp(N,maxN) : _ Where: N : the number of values to process maxN : the maximum number of values to process, needs to be a power of 2","title":"Usage"},{"location":"libs/basics/#parallel-operator","text":"Provides various operations on N parallel inputs using a high order parallelOp(op,N,x) function: parallelMax(n) : the max of n parallel inputs parallelMin(n) : the min of n parallel inputs parallelMean(n) : the mean of n parallel inputs parallelRMS(n) : the RMS of n parallel inputs","title":"Parallel Operator"},{"location":"libs/basics/#baparallelop","text":"Apply a commutative binary operation to N parallel inputs.","title":"(ba.)parallelOp"},{"location":"libs/basics/#usage_62","text":"si.bus(n) : parallelOp(op,n) : _ where: N : the number of parallel inputs known at compile time op : the operator which needs to be commutative","title":"usage"},{"location":"libs/basics/#baparallelmax","text":"The maximum of N parallel inputs.","title":"(ba.)parallelMax"},{"location":"libs/basics/#usage_63","text":"si.bus(n) : parallelMax(n) : _ Where: N : the number of parallel inputs known at compile time","title":"Usage"},{"location":"libs/basics/#baparallelmin","text":"The minimum of N parallel inputs.","title":"(ba.)parallelMin"},{"location":"libs/basics/#usage_64","text":"si.bus(n) : parallelMin(n) : _ Where: N : the number of parallel inputs known at compile time","title":"Usage"},{"location":"libs/basics/#baparallelmean","text":"The mean of N parallel inputs.","title":"(ba.)parallelMean"},{"location":"libs/basics/#usage_65","text":"si.bus(n) : parallelMean(n) : _ Where: N : the number of parallel inputs known at compile time","title":"Usage"},{"location":"libs/basics/#baparallelrms","text":"The RMS of N parallel inputs.","title":"(ba.)parallelRMS"},{"location":"libs/basics/#usage_66","text":"si.bus(n) : parallelRMS(n) : _ Where: N : the number of parallel inputs known at compile time","title":"Usage"},{"location":"libs/compressors/","text":"compressors.lib A library of compressor effects. Its official prefix is co . Functions Reference (co.)peak_compression_gain_mono Mono dynamic range compressor gain computer. peak_compression_gain_mono is a standard Faust function. Usage _ : peak_compression_gain_mono(strength,thresh,att,rel,knee,prePost) : _ Where: strength : strength of the compression (0 = no compression, 1 means hard limiting, >1 means over-compression) thresh : dB level threshold above which compression kicks in att : attack time = time constant (sec) when level & compression going up rel : release time = time constant (sec) coming out of compression knee : a gradual increase in gain reduction around the threshold: Below thresh-(knee/2) there is no gain reduction, above thresh+(knee/2) there is the same gain reduction as without a knee, and in between there is a gradual increase in gain reduction. prePost : places the level detector either at the input or after the gain computer; this turns it from a linear return-to-zero detector into a log domain return-to-threshold detector It uses a strength parameter instead of the traditional ratio, in order to be able to function as a hard limiter. For that you'd need a ratio of infinity:1, and you cannot express that in Faust Sometimes even bigger ratios are useful: For example a group recording where one instrument is recorded with both a close microphone and a room microphone, and the instrument is loud enough in the room mic when playing loud, but you want to boost it when it is playing soft. References http://en.wikipedia.org/wiki/Dynamic_range_compression Digital Dynamic Range Compressor Design A Tutorial and Analysis DIMITRIOS GIANNOULIS (Dimitrios.Giannoulis@eecs.qmul.ac.uk) MICHAEL MASSBERG (michael@massberg.org) AND JOSHUA D. REISS (josh.reiss@eecs.qmul.ac.uk) (co.)peak_compression_gain_N_chan N channel dynamic range compressor gain computer. peak_compression_gain_N_chan is a standard Faust function. Usage si.bus(N) : peak_compression_gain_N_chan(strength,thresh,att,rel,knee,prePost,link,N) : si.bus(N) Where: strength : strength of the compression (0 = no compression, 1 means hard limiting, >1 means over-compression) thresh : dB level threshold above which compression kicks in att : attack time = time constant (sec) when level & compression going up rel : release time = time constant (sec) coming out of compression knee : a gradual increase in gain reduction around the threshold: Below thresh-(knee/2) there is no gain reduction, above thresh+(knee/2) there is the same gain reduction as without a knee, and in between there is a gradual increase in gain reduction. prePost : places the level detector either at the input or after the gain computer; this turns it from a linear return-to-zero detector into a log domain return-to-threshold detector link : the amount of linkage between the channels. 0 = each channel is independent, 1 = all channels have the same amount of gain reduction N : the number of channels of the compressor It uses a strength parameter instead of the traditional ratio, in order to be able to function as a hard limiter. For that you'd need a ratio of infinity:1, and you cannot express that in Faust. Sometimes even bigger ratios are useful: for example a group recording where one instrument is recorded with both a close microphone and a room microphone, and the instrument is loud enough in the room mic when playing loud, but you want to boost it when it is playing soft. References http://en.wikipedia.org/wiki/Dynamic_range_compression Digital Dynamic Range Compressor Design A Tutorial and Analysis DIMITRIOS GIANNOULIS (Dimitrios.Giannoulis@eecs.qmul.ac.uk) MICHAEL MASSBERG (michael@massberg.org) AND JOSHUA D. REISS (josh.reiss@eecs.qmul.ac.uk) (co.)FFcompressor_N_chan feed forward N channel dynamic range compressor. FFcompressor_N_chan is a standard Faust function. Usage si.bus(N) : FFcompressor_N_chan(strength,thresh,att,rel,knee,prePost,link,meter,N) : si.bus(N) Where: strength : strength of the compression (0 = no compression, 1 means hard limiting, >1 means over-compression) thresh : dB level threshold above which compression kicks in att : attack time = time constant (sec) when level & compression going up rel : release time = time constant (sec) coming out of compression knee : a gradual increase in gain reduction around the threshold: Below thresh-(knee/2) there is no gain reduction, above thresh+(knee/2) there is the same gain reduction as without a knee, and in between there is a gradual increase in gain reduction. prePost : places the level detector either at the input or after the gain computer; this turns it from a linear return-to-zero detector into a log domain return-to-threshold detector link : the amount of linkage between the channels. 0 = each channel is independent, 1 = all channels have the same amount of gain reduction meter : a gain reduction meter. It can be implemented like so: meter = <:( , (ba.linear2db:max(maxGR):meter_group((hbargraph(\"[1][unit:dB][tooltip: gain reduction in dB]\", maxGR, 0))))):attach; N : the number of channels of the compressor It uses a strength parameter instead of the traditional ratio, in order to be able to function as a hard limiter. For that you'd need a ratio of infinity:1, and you cannot express that in Faust. Sometimes even bigger ratios are useful: for example a group recording where one instrument is recorded with both a close microphone and a room microphone, and the instrument is loud enough in the room mic when playing loud, but you want to boost it when it is playing soft. References http://en.wikipedia.org/wiki/Dynamic_range_compression Digital Dynamic Range Compressor Design A Tutorial and Analysis DIMITRIOS GIANNOULIS (Dimitrios.Giannoulis@eecs.qmul.ac.uk) MICHAEL MASSBERG (michael@massberg.org) AND JOSHUA D. REISS (josh.reiss@eecs.qmul.ac.uk) (co.)FBcompressor_N_chan feed back N channel dynamic range compressor. FBcompressor_N_chan is a standard Faust function. Usage si.bus(N) : FBcompressor_N_chan(strength,thresh,att,rel,knee,prePost,link,meter,N) : si.bus(N) Where: strength : strength of the compression (0 = no compression, 1 means hard limiting, >1 means over-compression) thresh : dB level threshold above which compression kicks in att : attack time = time constant (sec) when level & compression going up rel : release time = time constant (sec) coming out of compression knee : a gradual increase in gain reduction around the threshold: Below thresh-(knee/2) there is no gain reduction, above thresh+(knee/2) there is the same gain reduction as without a knee, and in between there is a gradual increase in gain reduction. prePost : places the level detector either at the input or after the gain computer; this turns it from a linear return-to-zero detector into a log domain return-to-threshold detector link : the amount of linkage between the channels. 0 = each channel is independent, 1 = all channels have the same amount of gain reduction meter : a gain reduction meter. It can be implemented like so: meter = <:( , (ba.linear2db:max(maxGR):meter_group((hbargraph(\"[1][unit:dB][tooltip: gain reduction in dB]\", maxGR, 0))))):attach; or it can be omitted by defining 'meter = _'. N : the number of channels of the compressor It uses a strength parameter instead of the traditional ratio, in order to be able to function as a hard limiter. For that you'd need a ratio of infinity:1, and you cannot express that in Faust. Sometimes even bigger ratios are useful: for example a group recording where one instrument is recorded with both a close microphone and a room microphone, and the instrument is loud enough in the room mic when playing loud, but you want to boost it when it is playing soft. References http://en.wikipedia.org/wiki/Dynamic_range_compression Digital Dynamic Range Compressor Design A Tutorial and Analysis DIMITRIOS GIANNOULIS (Dimitrios.Giannoulis@eecs.qmul.ac.uk) MICHAEL MASSBERG (michael@massberg.org) AND JOSHUA D. REISS (josh.reiss@eecs.qmul.ac.uk) (co.)FFFBcompressor_N_chan feed forward / feed back N channel dynamic range compressor. the feedback part has a much higher strength, so they end up sounding similar FFFBcompressor_N_chan is a standard Faust function. Usage si.bus(N) : FFFBcompressor_N_chan(strength,thresh,att,rel,knee,prePost,link,FBFF,meter,N) : si.bus(N) Where: strength : strength of the compression (0 = no compression, 1 means hard limiting, >1 means over-compression) thresh : dB level threshold above which compression kicks in att : attack time = time constant (sec) when level & compression going up rel : release time = time constant (sec) coming out of compression knee : a gradual increase in gain reduction around the threshold: Below thresh-(knee/2) there is no gain reduction, above thresh+(knee/2) there is the same gain reduction as without a knee, and in between there is a gradual increase in gain reduction. prePost : places the level detector either at the input or after the gain computer; this turns it from a linear return-to-zero detector into a log domain return-to-threshold detector link : the amount of linkage between the channels. 0 = each channel is independent, 1 = all channels have the same amount of gain reduction FFFB : fade between feed forward (0) and feed back (1) compression. meter : a gain reduction meter. It can be implemented like so: meter = <:( , (ba.linear2db:max(maxGR):meter_group((hbargraph(\"[1][unit:dB][tooltip: gain reduction in dB]\", maxGR, 0))))):attach; N : the number of channels of the compressor It uses a strength parameter instead of the traditional ratio, in order to be able to function as a hard limiter. For that you'd need a ratio of infinity:1, and you cannot express that in Faust. Sometimes even bigger ratios are useful: for example a group recording where one instrument is recorded with both a close microphone and a room microphone, and the instrument is loud enough in the room mic when playing loud, but you want to boost it when it is playing soft. References http://en.wikipedia.org/wiki/Dynamic_range_compression Digital Dynamic Range Compressor Design A Tutorial and Analysis DIMITRIOS GIANNOULIS (Dimitrios.Giannoulis@eecs.qmul.ac.uk) MICHAEL MASSBERG (michael@massberg.org) AND JOSHUA D. REISS (josh.reiss@eecs.qmul.ac.uk) (co.)RMS_compression_gain_mono Mono RMS dynamic range compressor gain computer. RMS_compression_gain_mono is a standard Faust function Usage _ : RMS_compression_gain_mono(strength,thresh,att,rel,knee,prePost) : _ Where: strength : strength of the compression (0 = no compression, 1 means hard limiting, >1 means over-compression) thresh : dB level threshold above which compression kicks in att : attack time = time constant (sec) when level & compression going up rel : release time = time constant (sec) coming out of compression knee : a gradual increase in gain reduction around the threshold: Below thresh-(knee/2) there is no gain reduction, above thresh+(knee/2) there is the same gain reduction as without a knee, and in between there is a gradual increase in gain reduction. prePost : places the level detector either at the input or after the gain computer; this turns it from a linear return-to-zero detector into a log domain return-to-threshold detector It uses a strength parameter instead of the traditional ratio, in order to be able to function as a hard limiter. For that you'd need a ratio of infinity:1, and you cannot express that in Faust. Sometimes even bigger ratios are useful: for example a group recording where one instrument is recorded with both a close microphone and a room microphone, and the instrument is loud enough in the room mic when playing loud, but you want to boost it when it is playing soft. References http://en.wikipedia.org/wiki/Dynamic_range_compression Digital Dynamic Range Compressor Design A Tutorial and Analysis DIMITRIOS GIANNOULIS (Dimitrios.Giannoulis@eecs.qmul.ac.uk) MICHAEL MASSBERG (michael@massberg.org) AND JOSHUA D. REISS (josh.reiss@eecs.qmul.ac.uk) (co.)RMS_compression_gain_N_chan RMS N channel dynamic range compressor gain computer. RMS_compression_gain_N_chan is a standard Faust function. Usage si.bus(N) : RMS_compression_gain_N_chan(strength,thresh,att,rel,knee,prePost,link,N) : si.bus(N) Where: strength : strength of the compression (0 = no compression, 1 means hard limiting, >1 means over-compression) thresh : dB level threshold above which compression kicks in att : attack time = time constant (sec) when level & compression going up rel : release time = time constant (sec) coming out of compression knee : a gradual increase in gain reduction around the threshold: Below thresh-(knee/2) there is no gain reduction, above thresh+(knee/2) there is the same gain reduction as without a knee, and in between there is a gradual increase in gain reduction. prePost : places the level detector either at the input or after the gain computer; this turns it from a linear return-to-zero detector into a log domain return-to-threshold detector link : the amount of linkage between the channels. 0 = each channel is independent, 1 = all channels have the same amount of gain reduction N : the number of channels of the compressor It uses a strength parameter instead of the traditional ratio, in order to be able to function as a hard limiter. For that you'd need a ratio of infinity:1, and you cannot express that in Faust. Sometimes even bigger ratios are useful: for example a group recording where one instrument is recorded with both a close microphone and a room microphone, and the instrument is loud enough in the room mic when playing loud, but you want to boost it when it is playing soft. References http://en.wikipedia.org/wiki/Dynamic_range_compression Digital Dynamic Range Compressor Design A Tutorial and Analysis DIMITRIOS GIANNOULIS (Dimitrios.Giannoulis@eecs.qmul.ac.uk) MICHAEL MASSBERG (michael@massberg.org) AND JOSHUA D. REISS (josh.reiss@eecs.qmul.ac.uk) (co.)RMS_FFFBcompressor_N_chan RMS feed forward / feed back N channel dynamic range compressor. the feedback part has a much higher strength, so they end up sounding similar RMS_FFFBcompressor_N_chan is a standard Faust function. Usage si.bus(N) : RMS_FFFBcompressor_N_chan(strength,thresh,att,rel,knee,prePost,link,FBFF,meter,N) : si.bus(N) Where: strength : strength of the compression (0 = no compression, 1 means hard limiting, >1 means over-compression) thresh : dB level threshold above which compression kicks in att : attack time = time constant (sec) when level & compression going up rel : release time = time constant (sec) coming out of compression knee : a gradual increase in gain reduction around the threshold: Below thresh-(knee/2) there is no gain reduction, above thresh+(knee/2) there is the same gain reduction as without a knee, and in between there is a gradual increase in gain reduction. prePost : places the level detector either at the input or after the gain computer; this turns it from a linear return-to-zero detector into a log domain return-to-threshold detector link : the amount of linkage between the channels. 0 = each channel is independent, 1 = all channels have the same amount of gain reduction FFFB : fade between feed forward (0) and feed back (1) compression. meter : a gain reduction meter. It can be implemented like so: meter = <:( , (ba.linear2db:max(maxGR):meter_group((hbargraph(\"[1][unit:dB][tooltip: gain reduction in dB]\", maxGR, 0))))):attach; N : the number of channels of the compressor It uses a strength parameter instead of the traditional ratio, in order to be able to function as a hard limiter. For that you'd need a ratio of infinity:1, and you cannot express that in Faust. Sometimes even bigger ratios are useful: for example a group recording where one instrument is recorded with both a close microphone and a room microphone, and the instrument is loud enough in the room mic when playing loud, but you want to boost it when it is playing soft. to save CPU we cheat a bit, in a similar way as in the original libs: instead of crosfading between two sets of gain calculators as above, we take the abs of the audio from both the FF and FB, and crossfade between those, and feed that into one set of gain calculators again the strength is much higher when in FB mode, but implemented differently References http://en.wikipedia.org/wiki/Dynamic_range_compression Digital Dynamic Range Compressor Design A Tutorial and Analysis DIMITRIOS GIANNOULIS (Dimitrios.Giannoulis@eecs.qmul.ac.uk) MICHAEL MASSBERG (michael@massberg.org) AND JOSHUA D. REISS (josh.reiss@eecs.qmul.ac.uk) (co.)RMS_FBcompressor_peak_limiter_N_chan N channel RMS feed back compressor into peak limiter feeding back into the FB compressor. By combining them this way, they complement each other optimally: The RMS compressor doesn't have to deal with the peaks, and the peak limiter get's spared from the steady state signal. the feedback part has a much higher strength, so they end up sounding similar RMS_FBcompressor_peak_limiter_N_chan is a standard Faust function. Usage si.bus(N) : RMS_FBcompressor_peak_limiter_N_chan(strength,thresh,threshLim,att,rel,knee,link,meter,N) : si.bus(N) Where: strength : strength of the compression (0 = no compression, 1 means hard limiting, >1 means over-compression) thresh : dB level threshold above which compression kicks in threshLim : dB level threshold above which the brick wall limiter kicks in att : attack time = time constant (sec) when level & compression going up this is also used as the release time of the limiter rel : release time = time constant (sec) coming out of compression knee : a gradual increase in gain reduction around the threshold: Below thresh-(knee/2) there is no gain reduction, above thresh+(knee/2) there is the same gain reduction as without a knee, and in between there is a gradual increase in gain reduction. the limiter uses a knee half this size link : the amount of linkage between the channels. 0 = each channel is independent, 1 = all channels have the same amount of gain reduction meter : a gain reduction meter. It can be implemented like so: meter = <:( , (ba.linear2db:max(maxGR):meter_group((hbargraph(\"[1][unit:dB][tooltip: gain reduction in dB]\", maxGR, 0))))):attach; N : the number of channels of the compressor It uses a strength parameter instead of the traditional ratio, in order to be able to function as a hard limiter. For that you'd need a ratio of infinity:1, and you cannot express that in Faust. Sometimes even bigger ratios are useful: for example a group recording where one instrument is recorded with both a close microphone and a room microphone, and the instrument is loud enough in the room mic when playing loud, but you want to boost it when it is playing soft. References http://en.wikipedia.org/wiki/Dynamic_range_compression Digital Dynamic Range Compressor Design A Tutorial and Analysis DIMITRIOS GIANNOULIS (Dimitrios.Giannoulis@eecs.qmul.ac.uk) MICHAEL MASSBERG (michael@massberg.org) AND JOSHUA D. REISS (josh.reiss@eecs.qmul.ac.uk) Original versions section The functions in this section are largely superseded by the limiters above, but we retain them for backward compatibility and for situations in which a more permissive, MIT-style license is required. Functions Reference (co.)compressor_lad_mono Mono dynamic range compressor with lookahead delay. compressor_lad_mono is a standard Faust function. Usage _ : compressor_lad_mono(lad,ratio,thresh,att,rel) : _ Where: lad : lookahead delay in seconds (nonnegative) - gets rounded to nearest sample. The effective attack time is a good setting. ratio : compression ratio (1 = no compression, >1 means compression) Ratios: 4 is moderate compression, 8 is strong compression, 12 is mild limiting, and 20 is pretty hard limiting at the threshold. thresh : dB level threshold above which compression kicks in (0 dB = max level) att : attack time = time constant (sec) when level & compression are going up rel : release time = time constant (sec) coming out of compression References http://en.wikipedia.org/wiki/Dynamic_range_compression https://ccrma.stanford.edu/~jos/filters/Nonlinear_Filter_Example_Dynamic.html Albert Graef's \"faust2pd\"/examples/synth/compressor_.dsp More features: https://github.com/magnetophon/faustCompressors (co.)compressor_mono Mono dynamic range compressors. compressor_mono is a standard Faust function. Usage _ : compressor_mono(ratio,thresh,att,rel) : _ Where: ratio : compression ratio (1 = no compression, >1 means compression) Ratios: 4 is moderate compression, 8 is strong compression, 12 is mild limiting, and 20 is pretty hard limiting at the threshold. thresh : dB level threshold above which compression kicks in (0 dB = max level) att : attack time = time constant (sec) when level & compression are going up rel : release time = time constant (sec) coming out of compression References http://en.wikipedia.org/wiki/Dynamic_range_compression https://ccrma.stanford.edu/~jos/filters/Nonlinear_Filter_Example_Dynamic.html Albert Graef's \"faust2pd\"/examples/synth/compressor_.dsp More features: https://github.com/magnetophon/faustCompressors (co.)compressor_stereo Stereo dynamic range compressors. Usage _,_ : compressor_stereo(ratio,thresh,att,rel) : _,_ Where: ratio : compression ratio (1 = no compression, >1 means compression) thresh : dB level threshold above which compression kicks in (0 dB = max level) att : attack time = time constant (sec) when level & compression going up rel : release time = time constant (sec) coming out of compression References http://en.wikipedia.org/wiki/Dynamic_range_compression https://ccrma.stanford.edu/~jos/filters/Nonlinear_Filter_Example_Dynamic.html Albert Graef's \"faust2pd\"/examples/synth/compressor_.dsp More features: https://github.com/magnetophon/faustCompressors (co.)compression_gain_mono Compression-gain calculation for dynamic range compressors. Usage _ : compression_gain_mono(ratio,thresh,att,rel) : _ Where: ratio : compression ratio (1 = no compression, >1 means compression) thresh : dB level threshold above which compression kicks in (0 dB = max level) att : attack time = time constant (sec) when level & compression going up rel : release time = time constant (sec) coming out of compression References http://en.wikipedia.org/wiki/Dynamic_range_compression https://ccrma.stanford.edu/~jos/filters/Nonlinear_Filter_Example_Dynamic.html Albert Graef's \"faust2pd\"/examples/synth/compressor_.dsp More features: https://github.com/magnetophon/faustCompressors (co.)limiter_1176_R4_mono A limiter guards against hard-clipping. It can be implemented as a compressor having a high threshold (near the clipping level), fast attack, and high ratio. Since the compression ratio is so high, some knee smoothing is desirable (for softer limiting). This example is intended to get you started using compressors as limiters, so all parameters are hardwired here to nominal values. Ratio: 4 (moderate compression) See compressor_mono() comments for a guide to other choices. Mike Shipley likes this (lowest) setting on the 1176. (Grammy award-winning mixer for Queen, Tom Petty, etc.) Thresh: -6 dB, meaning 4:1 compression begins at amplitude 1/2. Att: 800 MICROseconds (Note: scaled by ratio in the 1176) The 1176 range is said to be 20-800 microseconds. Faster attack gives \"more bite\" (e.g. on vocals), and makes hard-clipping less likely on fast overloads. Rel: 0.5 s (Note: scaled by ratio in the 1176) The 1176 range is said to be 50-1100 ms. The 1176 also has a \"bright, clear eq effect\" (use filters.lib if desired). limiter_1176_R4_mono is a standard Faust function. Usage _ : limiter_1176_R4_mono : _; Reference: http://en.wikipedia.org/wiki/1176_Peak_Limiter (co.)limiter_1176_R4_stereo A limiter guards against hard-clipping. It can be implemented as a compressor having a high threshold (near the clipping level), fast attack and release, and high ratio. Since the ratio is so high, some knee smoothing is desirable (\"soft limiting\"). This example is intended to get you started using compressor_* as a limiter, so all parameters are hardwired to nominal values here. Ratios: 4 (moderate compression), 8 (severe compression), 12 (mild limiting), or 20 to 1 (hard limiting) Att: 20-800 MICROseconds (Note: scaled by ratio in the 1176) Rel: 50-1100 ms (Note: scaled by ratio in the 1176) Mike Shipley likes 4:1 (Grammy-winning mixer for Queen, Tom Petty, etc.) Faster attack gives \"more bite\" (e.g. on vocals) He hears a bright, clear eq effect as well (not implemented here) Usage _,_ : limiter_1176_R4_stereo : _,_; Reference: http://en.wikipedia.org/wiki/1176_Peak_Limiter (co.)limiter_lad_N N-channel lookahead limiter inspired by IOhannes Zm\u00f6lnig's post, which is in turn based on the thesis by Peter Falkner \"Entwicklung eines digitalen Stereo-Limiters mit Hilfe des Signalprozessors DSP56001\". This version of the limiter uses a peak-holder with smoothed attack and release based on tau time constant filters. It is also possible to use a time constant that is 2 PI tau by dividing the attack and release times by 2*PI. This time constant allows for the amplitude profile to reach 1 - e^(-2pi) of the final peak after the attack time. The input path can be delayed by the same amount as the attack time to synchronise input and amplitude profile, realising a system that is particularly effective as a colourless (ideally) brickwall limiter. Note that the effectiveness of the ceiling settings are dependent on the other parameters, especially the time constant used for the smoothing filters and the lookahead delay. Similarly, the colourless characteristics are also dependent on attack, hold, and release times. Since fluctuations above ~15 Hz are perceived as timbral effects, [Vassilakis and Kendall 2010] it is reasonable to set the attack time to 1/15 seconds for a smooth amplitude modulation. On the other hand, the hold time can be set to the peak-to-peak period of the expected lowest frequency in the signal, which allows for minimal distortion of the low frequencies. The release time can then provide a perceptually linear and gradual gain increase determined by the user for any specific application. The scaling factor for all the channels is determined by the loudest peak between them all, so that amplitude ratios between the signals are kept. Usage si.bus(N) : limiter_lad_N(N, LD, ceiling, attack, hold, release) : si.bus(N); Where: N is the number of channels, known at compile-time. LD is the lookahead delay in seconds, known at compile-time. ceiling is the linear amplitude output limit. attack is the attack time in seconds. hold is the hold time in seconds. release is the release time in seconds. Example for a stereo limiter: limiter_lad_N(2, .01, 1, .01, .1, 1); Reference: http://iem.at/~zmoelnig/publications/limiter/ . (co.)limiter_lad_mono Specialised case of limiter_lad_N: mono limiter. Usage _ : limiter_lad_mono(LD, ceiling, attack, hold, release) : _; Where: LD is the lookahead delay in seconds, known at compile-time. ceiling is the linear amplitude output limit. attack is the attack time in seconds. hold is the hold time in seconds. release is the release time in seconds. Reference: http://iem.at/~zmoelnig/publications/limiter/ . (co.)limiter_lad_stereo Specialised case of limiter_lad_N: stereo limiter. Usage _ , _ : limiter_lad_stereo(LD, ceiling, attack, hold, release) : _ , _; Where: LD is the lookahead delay in seconds, known at compile-time. ceiling is the linear amplitude output limit. attack is the attack time in seconds. hold is the hold time in seconds. release is the release time in seconds. Reference: http://iem.at/~zmoelnig/publications/limiter/ . (co.)limiter_lad_quad Specialised case of limiter_lad_N: quadraphonic limiter. Usage si.bus(4) : limiter_lad_quad(LD, ceiling, attack, hold, release) : si.bus(4); Where: LD is the lookahead delay in seconds, known at compile-time. ceiling is the linear amplitude output limit. attack is the attack time in seconds. hold is the hold time in seconds. release is the release time in seconds. Reference: http://iem.at/~zmoelnig/publications/limiter/ . (co.)limiter_lad_bw Specialised case of limiter_lad_N and ready-to-use unit-amplitude mono limiting function. This implementation, in particular, uses 2pi*tau time constant filters for attack and release smoothing with synchronised input and gain signals. This function's best application is to be used as a brickwall limiter with the least colouring artefacts while keeping a not-so-slow release curve. Tests have shown that, given a pop song with 60 dB of amplification and a 0-dB-ceiling, the loudest peak recorded was ~0.38 dB. Usage _ : limiter_lad_bw : _; Reference: http://iem.at/~zmoelnig/publications/limiter/ .","title":" compressors "},{"location":"libs/compressors/#compressorslib","text":"A library of compressor effects. Its official prefix is co .","title":"compressors.lib"},{"location":"libs/compressors/#functions-reference","text":"","title":"Functions Reference"},{"location":"libs/compressors/#copeak_compression_gain_mono","text":"Mono dynamic range compressor gain computer. peak_compression_gain_mono is a standard Faust function.","title":"(co.)peak_compression_gain_mono"},{"location":"libs/compressors/#usage","text":"_ : peak_compression_gain_mono(strength,thresh,att,rel,knee,prePost) : _ Where: strength : strength of the compression (0 = no compression, 1 means hard limiting, >1 means over-compression) thresh : dB level threshold above which compression kicks in att : attack time = time constant (sec) when level & compression going up rel : release time = time constant (sec) coming out of compression knee : a gradual increase in gain reduction around the threshold: Below thresh-(knee/2) there is no gain reduction, above thresh+(knee/2) there is the same gain reduction as without a knee, and in between there is a gradual increase in gain reduction. prePost : places the level detector either at the input or after the gain computer; this turns it from a linear return-to-zero detector into a log domain return-to-threshold detector It uses a strength parameter instead of the traditional ratio, in order to be able to function as a hard limiter. For that you'd need a ratio of infinity:1, and you cannot express that in Faust Sometimes even bigger ratios are useful: For example a group recording where one instrument is recorded with both a close microphone and a room microphone, and the instrument is loud enough in the room mic when playing loud, but you want to boost it when it is playing soft.","title":"Usage"},{"location":"libs/compressors/#references","text":"http://en.wikipedia.org/wiki/Dynamic_range_compression Digital Dynamic Range Compressor Design A Tutorial and Analysis DIMITRIOS GIANNOULIS (Dimitrios.Giannoulis@eecs.qmul.ac.uk) MICHAEL MASSBERG (michael@massberg.org) AND JOSHUA D. REISS (josh.reiss@eecs.qmul.ac.uk)","title":"References"},{"location":"libs/compressors/#copeak_compression_gain_n_chan","text":"N channel dynamic range compressor gain computer. peak_compression_gain_N_chan is a standard Faust function.","title":"(co.)peak_compression_gain_N_chan"},{"location":"libs/compressors/#usage_1","text":"si.bus(N) : peak_compression_gain_N_chan(strength,thresh,att,rel,knee,prePost,link,N) : si.bus(N) Where: strength : strength of the compression (0 = no compression, 1 means hard limiting, >1 means over-compression) thresh : dB level threshold above which compression kicks in att : attack time = time constant (sec) when level & compression going up rel : release time = time constant (sec) coming out of compression knee : a gradual increase in gain reduction around the threshold: Below thresh-(knee/2) there is no gain reduction, above thresh+(knee/2) there is the same gain reduction as without a knee, and in between there is a gradual increase in gain reduction. prePost : places the level detector either at the input or after the gain computer; this turns it from a linear return-to-zero detector into a log domain return-to-threshold detector link : the amount of linkage between the channels. 0 = each channel is independent, 1 = all channels have the same amount of gain reduction N : the number of channels of the compressor It uses a strength parameter instead of the traditional ratio, in order to be able to function as a hard limiter. For that you'd need a ratio of infinity:1, and you cannot express that in Faust. Sometimes even bigger ratios are useful: for example a group recording where one instrument is recorded with both a close microphone and a room microphone, and the instrument is loud enough in the room mic when playing loud, but you want to boost it when it is playing soft.","title":"Usage"},{"location":"libs/compressors/#references_1","text":"http://en.wikipedia.org/wiki/Dynamic_range_compression Digital Dynamic Range Compressor Design A Tutorial and Analysis DIMITRIOS GIANNOULIS (Dimitrios.Giannoulis@eecs.qmul.ac.uk) MICHAEL MASSBERG (michael@massberg.org) AND JOSHUA D. REISS (josh.reiss@eecs.qmul.ac.uk)","title":"References"},{"location":"libs/compressors/#coffcompressor_n_chan","text":"feed forward N channel dynamic range compressor. FFcompressor_N_chan is a standard Faust function.","title":"(co.)FFcompressor_N_chan"},{"location":"libs/compressors/#usage_2","text":"si.bus(N) : FFcompressor_N_chan(strength,thresh,att,rel,knee,prePost,link,meter,N) : si.bus(N) Where: strength : strength of the compression (0 = no compression, 1 means hard limiting, >1 means over-compression) thresh : dB level threshold above which compression kicks in att : attack time = time constant (sec) when level & compression going up rel : release time = time constant (sec) coming out of compression knee : a gradual increase in gain reduction around the threshold: Below thresh-(knee/2) there is no gain reduction, above thresh+(knee/2) there is the same gain reduction as without a knee, and in between there is a gradual increase in gain reduction. prePost : places the level detector either at the input or after the gain computer; this turns it from a linear return-to-zero detector into a log domain return-to-threshold detector link : the amount of linkage between the channels. 0 = each channel is independent, 1 = all channels have the same amount of gain reduction meter : a gain reduction meter. It can be implemented like so: meter = <:( , (ba.linear2db:max(maxGR):meter_group((hbargraph(\"[1][unit:dB][tooltip: gain reduction in dB]\", maxGR, 0))))):attach; N : the number of channels of the compressor It uses a strength parameter instead of the traditional ratio, in order to be able to function as a hard limiter. For that you'd need a ratio of infinity:1, and you cannot express that in Faust. Sometimes even bigger ratios are useful: for example a group recording where one instrument is recorded with both a close microphone and a room microphone, and the instrument is loud enough in the room mic when playing loud, but you want to boost it when it is playing soft.","title":"Usage"},{"location":"libs/compressors/#references_2","text":"http://en.wikipedia.org/wiki/Dynamic_range_compression Digital Dynamic Range Compressor Design A Tutorial and Analysis DIMITRIOS GIANNOULIS (Dimitrios.Giannoulis@eecs.qmul.ac.uk) MICHAEL MASSBERG (michael@massberg.org) AND JOSHUA D. REISS (josh.reiss@eecs.qmul.ac.uk)","title":"References"},{"location":"libs/compressors/#cofbcompressor_n_chan","text":"feed back N channel dynamic range compressor. FBcompressor_N_chan is a standard Faust function.","title":"(co.)FBcompressor_N_chan"},{"location":"libs/compressors/#usage_3","text":"si.bus(N) : FBcompressor_N_chan(strength,thresh,att,rel,knee,prePost,link,meter,N) : si.bus(N) Where: strength : strength of the compression (0 = no compression, 1 means hard limiting, >1 means over-compression) thresh : dB level threshold above which compression kicks in att : attack time = time constant (sec) when level & compression going up rel : release time = time constant (sec) coming out of compression knee : a gradual increase in gain reduction around the threshold: Below thresh-(knee/2) there is no gain reduction, above thresh+(knee/2) there is the same gain reduction as without a knee, and in between there is a gradual increase in gain reduction. prePost : places the level detector either at the input or after the gain computer; this turns it from a linear return-to-zero detector into a log domain return-to-threshold detector link : the amount of linkage between the channels. 0 = each channel is independent, 1 = all channels have the same amount of gain reduction meter : a gain reduction meter. It can be implemented like so: meter = <:( , (ba.linear2db:max(maxGR):meter_group((hbargraph(\"[1][unit:dB][tooltip: gain reduction in dB]\", maxGR, 0))))):attach; or it can be omitted by defining 'meter = _'. N : the number of channels of the compressor It uses a strength parameter instead of the traditional ratio, in order to be able to function as a hard limiter. For that you'd need a ratio of infinity:1, and you cannot express that in Faust. Sometimes even bigger ratios are useful: for example a group recording where one instrument is recorded with both a close microphone and a room microphone, and the instrument is loud enough in the room mic when playing loud, but you want to boost it when it is playing soft.","title":"Usage"},{"location":"libs/compressors/#references_3","text":"http://en.wikipedia.org/wiki/Dynamic_range_compression Digital Dynamic Range Compressor Design A Tutorial and Analysis DIMITRIOS GIANNOULIS (Dimitrios.Giannoulis@eecs.qmul.ac.uk) MICHAEL MASSBERG (michael@massberg.org) AND JOSHUA D. REISS (josh.reiss@eecs.qmul.ac.uk)","title":"References"},{"location":"libs/compressors/#cofffbcompressor_n_chan","text":"feed forward / feed back N channel dynamic range compressor. the feedback part has a much higher strength, so they end up sounding similar FFFBcompressor_N_chan is a standard Faust function.","title":"(co.)FFFBcompressor_N_chan"},{"location":"libs/compressors/#usage_4","text":"si.bus(N) : FFFBcompressor_N_chan(strength,thresh,att,rel,knee,prePost,link,FBFF,meter,N) : si.bus(N) Where: strength : strength of the compression (0 = no compression, 1 means hard limiting, >1 means over-compression) thresh : dB level threshold above which compression kicks in att : attack time = time constant (sec) when level & compression going up rel : release time = time constant (sec) coming out of compression knee : a gradual increase in gain reduction around the threshold: Below thresh-(knee/2) there is no gain reduction, above thresh+(knee/2) there is the same gain reduction as without a knee, and in between there is a gradual increase in gain reduction. prePost : places the level detector either at the input or after the gain computer; this turns it from a linear return-to-zero detector into a log domain return-to-threshold detector link : the amount of linkage between the channels. 0 = each channel is independent, 1 = all channels have the same amount of gain reduction FFFB : fade between feed forward (0) and feed back (1) compression. meter : a gain reduction meter. It can be implemented like so: meter = <:( , (ba.linear2db:max(maxGR):meter_group((hbargraph(\"[1][unit:dB][tooltip: gain reduction in dB]\", maxGR, 0))))):attach; N : the number of channels of the compressor It uses a strength parameter instead of the traditional ratio, in order to be able to function as a hard limiter. For that you'd need a ratio of infinity:1, and you cannot express that in Faust. Sometimes even bigger ratios are useful: for example a group recording where one instrument is recorded with both a close microphone and a room microphone, and the instrument is loud enough in the room mic when playing loud, but you want to boost it when it is playing soft.","title":"Usage"},{"location":"libs/compressors/#references_4","text":"http://en.wikipedia.org/wiki/Dynamic_range_compression Digital Dynamic Range Compressor Design A Tutorial and Analysis DIMITRIOS GIANNOULIS (Dimitrios.Giannoulis@eecs.qmul.ac.uk) MICHAEL MASSBERG (michael@massberg.org) AND JOSHUA D. REISS (josh.reiss@eecs.qmul.ac.uk)","title":"References"},{"location":"libs/compressors/#corms_compression_gain_mono","text":"Mono RMS dynamic range compressor gain computer. RMS_compression_gain_mono is a standard Faust function","title":"(co.)RMS_compression_gain_mono"},{"location":"libs/compressors/#usage_5","text":"_ : RMS_compression_gain_mono(strength,thresh,att,rel,knee,prePost) : _ Where: strength : strength of the compression (0 = no compression, 1 means hard limiting, >1 means over-compression) thresh : dB level threshold above which compression kicks in att : attack time = time constant (sec) when level & compression going up rel : release time = time constant (sec) coming out of compression knee : a gradual increase in gain reduction around the threshold: Below thresh-(knee/2) there is no gain reduction, above thresh+(knee/2) there is the same gain reduction as without a knee, and in between there is a gradual increase in gain reduction. prePost : places the level detector either at the input or after the gain computer; this turns it from a linear return-to-zero detector into a log domain return-to-threshold detector It uses a strength parameter instead of the traditional ratio, in order to be able to function as a hard limiter. For that you'd need a ratio of infinity:1, and you cannot express that in Faust. Sometimes even bigger ratios are useful: for example a group recording where one instrument is recorded with both a close microphone and a room microphone, and the instrument is loud enough in the room mic when playing loud, but you want to boost it when it is playing soft.","title":"Usage"},{"location":"libs/compressors/#references_5","text":"http://en.wikipedia.org/wiki/Dynamic_range_compression Digital Dynamic Range Compressor Design A Tutorial and Analysis DIMITRIOS GIANNOULIS (Dimitrios.Giannoulis@eecs.qmul.ac.uk) MICHAEL MASSBERG (michael@massberg.org) AND JOSHUA D. REISS (josh.reiss@eecs.qmul.ac.uk)","title":"References"},{"location":"libs/compressors/#corms_compression_gain_n_chan","text":"RMS N channel dynamic range compressor gain computer. RMS_compression_gain_N_chan is a standard Faust function.","title":"(co.)RMS_compression_gain_N_chan"},{"location":"libs/compressors/#usage_6","text":"si.bus(N) : RMS_compression_gain_N_chan(strength,thresh,att,rel,knee,prePost,link,N) : si.bus(N) Where: strength : strength of the compression (0 = no compression, 1 means hard limiting, >1 means over-compression) thresh : dB level threshold above which compression kicks in att : attack time = time constant (sec) when level & compression going up rel : release time = time constant (sec) coming out of compression knee : a gradual increase in gain reduction around the threshold: Below thresh-(knee/2) there is no gain reduction, above thresh+(knee/2) there is the same gain reduction as without a knee, and in between there is a gradual increase in gain reduction. prePost : places the level detector either at the input or after the gain computer; this turns it from a linear return-to-zero detector into a log domain return-to-threshold detector link : the amount of linkage between the channels. 0 = each channel is independent, 1 = all channels have the same amount of gain reduction N : the number of channels of the compressor It uses a strength parameter instead of the traditional ratio, in order to be able to function as a hard limiter. For that you'd need a ratio of infinity:1, and you cannot express that in Faust. Sometimes even bigger ratios are useful: for example a group recording where one instrument is recorded with both a close microphone and a room microphone, and the instrument is loud enough in the room mic when playing loud, but you want to boost it when it is playing soft.","title":"Usage"},{"location":"libs/compressors/#references_6","text":"http://en.wikipedia.org/wiki/Dynamic_range_compression Digital Dynamic Range Compressor Design A Tutorial and Analysis DIMITRIOS GIANNOULIS (Dimitrios.Giannoulis@eecs.qmul.ac.uk) MICHAEL MASSBERG (michael@massberg.org) AND JOSHUA D. REISS (josh.reiss@eecs.qmul.ac.uk)","title":"References"},{"location":"libs/compressors/#corms_fffbcompressor_n_chan","text":"RMS feed forward / feed back N channel dynamic range compressor. the feedback part has a much higher strength, so they end up sounding similar RMS_FFFBcompressor_N_chan is a standard Faust function.","title":"(co.)RMS_FFFBcompressor_N_chan"},{"location":"libs/compressors/#usage_7","text":"si.bus(N) : RMS_FFFBcompressor_N_chan(strength,thresh,att,rel,knee,prePost,link,FBFF,meter,N) : si.bus(N) Where: strength : strength of the compression (0 = no compression, 1 means hard limiting, >1 means over-compression) thresh : dB level threshold above which compression kicks in att : attack time = time constant (sec) when level & compression going up rel : release time = time constant (sec) coming out of compression knee : a gradual increase in gain reduction around the threshold: Below thresh-(knee/2) there is no gain reduction, above thresh+(knee/2) there is the same gain reduction as without a knee, and in between there is a gradual increase in gain reduction. prePost : places the level detector either at the input or after the gain computer; this turns it from a linear return-to-zero detector into a log domain return-to-threshold detector link : the amount of linkage between the channels. 0 = each channel is independent, 1 = all channels have the same amount of gain reduction FFFB : fade between feed forward (0) and feed back (1) compression. meter : a gain reduction meter. It can be implemented like so: meter = <:( , (ba.linear2db:max(maxGR):meter_group((hbargraph(\"[1][unit:dB][tooltip: gain reduction in dB]\", maxGR, 0))))):attach; N : the number of channels of the compressor It uses a strength parameter instead of the traditional ratio, in order to be able to function as a hard limiter. For that you'd need a ratio of infinity:1, and you cannot express that in Faust. Sometimes even bigger ratios are useful: for example a group recording where one instrument is recorded with both a close microphone and a room microphone, and the instrument is loud enough in the room mic when playing loud, but you want to boost it when it is playing soft. to save CPU we cheat a bit, in a similar way as in the original libs: instead of crosfading between two sets of gain calculators as above, we take the abs of the audio from both the FF and FB, and crossfade between those, and feed that into one set of gain calculators again the strength is much higher when in FB mode, but implemented differently","title":"Usage"},{"location":"libs/compressors/#references_7","text":"http://en.wikipedia.org/wiki/Dynamic_range_compression Digital Dynamic Range Compressor Design A Tutorial and Analysis DIMITRIOS GIANNOULIS (Dimitrios.Giannoulis@eecs.qmul.ac.uk) MICHAEL MASSBERG (michael@massberg.org) AND JOSHUA D. REISS (josh.reiss@eecs.qmul.ac.uk)","title":"References"},{"location":"libs/compressors/#corms_fbcompressor_peak_limiter_n_chan","text":"N channel RMS feed back compressor into peak limiter feeding back into the FB compressor. By combining them this way, they complement each other optimally: The RMS compressor doesn't have to deal with the peaks, and the peak limiter get's spared from the steady state signal. the feedback part has a much higher strength, so they end up sounding similar RMS_FBcompressor_peak_limiter_N_chan is a standard Faust function.","title":"(co.)RMS_FBcompressor_peak_limiter_N_chan"},{"location":"libs/compressors/#usage_8","text":"si.bus(N) : RMS_FBcompressor_peak_limiter_N_chan(strength,thresh,threshLim,att,rel,knee,link,meter,N) : si.bus(N) Where: strength : strength of the compression (0 = no compression, 1 means hard limiting, >1 means over-compression) thresh : dB level threshold above which compression kicks in threshLim : dB level threshold above which the brick wall limiter kicks in att : attack time = time constant (sec) when level & compression going up this is also used as the release time of the limiter rel : release time = time constant (sec) coming out of compression knee : a gradual increase in gain reduction around the threshold: Below thresh-(knee/2) there is no gain reduction, above thresh+(knee/2) there is the same gain reduction as without a knee, and in between there is a gradual increase in gain reduction. the limiter uses a knee half this size link : the amount of linkage between the channels. 0 = each channel is independent, 1 = all channels have the same amount of gain reduction meter : a gain reduction meter. It can be implemented like so: meter = <:( , (ba.linear2db:max(maxGR):meter_group((hbargraph(\"[1][unit:dB][tooltip: gain reduction in dB]\", maxGR, 0))))):attach; N : the number of channels of the compressor It uses a strength parameter instead of the traditional ratio, in order to be able to function as a hard limiter. For that you'd need a ratio of infinity:1, and you cannot express that in Faust. Sometimes even bigger ratios are useful: for example a group recording where one instrument is recorded with both a close microphone and a room microphone, and the instrument is loud enough in the room mic when playing loud, but you want to boost it when it is playing soft.","title":"Usage"},{"location":"libs/compressors/#references_8","text":"http://en.wikipedia.org/wiki/Dynamic_range_compression Digital Dynamic Range Compressor Design A Tutorial and Analysis DIMITRIOS GIANNOULIS (Dimitrios.Giannoulis@eecs.qmul.ac.uk) MICHAEL MASSBERG (michael@massberg.org) AND JOSHUA D. REISS (josh.reiss@eecs.qmul.ac.uk)","title":"References"},{"location":"libs/compressors/#original-versions-section","text":"The functions in this section are largely superseded by the limiters above, but we retain them for backward compatibility and for situations in which a more permissive, MIT-style license is required.","title":"Original versions section"},{"location":"libs/compressors/#functions-reference_1","text":"","title":"Functions Reference"},{"location":"libs/compressors/#cocompressor_lad_mono","text":"Mono dynamic range compressor with lookahead delay. compressor_lad_mono is a standard Faust function.","title":"(co.)compressor_lad_mono"},{"location":"libs/compressors/#usage_9","text":"_ : compressor_lad_mono(lad,ratio,thresh,att,rel) : _ Where: lad : lookahead delay in seconds (nonnegative) - gets rounded to nearest sample. The effective attack time is a good setting. ratio : compression ratio (1 = no compression, >1 means compression) Ratios: 4 is moderate compression, 8 is strong compression, 12 is mild limiting, and 20 is pretty hard limiting at the threshold. thresh : dB level threshold above which compression kicks in (0 dB = max level) att : attack time = time constant (sec) when level & compression are going up rel : release time = time constant (sec) coming out of compression","title":"Usage"},{"location":"libs/compressors/#references_9","text":"http://en.wikipedia.org/wiki/Dynamic_range_compression https://ccrma.stanford.edu/~jos/filters/Nonlinear_Filter_Example_Dynamic.html Albert Graef's \"faust2pd\"/examples/synth/compressor_.dsp More features: https://github.com/magnetophon/faustCompressors","title":"References"},{"location":"libs/compressors/#cocompressor_mono","text":"Mono dynamic range compressors. compressor_mono is a standard Faust function.","title":"(co.)compressor_mono"},{"location":"libs/compressors/#usage_10","text":"_ : compressor_mono(ratio,thresh,att,rel) : _ Where: ratio : compression ratio (1 = no compression, >1 means compression) Ratios: 4 is moderate compression, 8 is strong compression, 12 is mild limiting, and 20 is pretty hard limiting at the threshold. thresh : dB level threshold above which compression kicks in (0 dB = max level) att : attack time = time constant (sec) when level & compression are going up rel : release time = time constant (sec) coming out of compression","title":"Usage"},{"location":"libs/compressors/#references_10","text":"http://en.wikipedia.org/wiki/Dynamic_range_compression https://ccrma.stanford.edu/~jos/filters/Nonlinear_Filter_Example_Dynamic.html Albert Graef's \"faust2pd\"/examples/synth/compressor_.dsp More features: https://github.com/magnetophon/faustCompressors","title":"References"},{"location":"libs/compressors/#cocompressor_stereo","text":"Stereo dynamic range compressors.","title":"(co.)compressor_stereo"},{"location":"libs/compressors/#usage_11","text":"_,_ : compressor_stereo(ratio,thresh,att,rel) : _,_ Where: ratio : compression ratio (1 = no compression, >1 means compression) thresh : dB level threshold above which compression kicks in (0 dB = max level) att : attack time = time constant (sec) when level & compression going up rel : release time = time constant (sec) coming out of compression","title":"Usage"},{"location":"libs/compressors/#references_11","text":"http://en.wikipedia.org/wiki/Dynamic_range_compression https://ccrma.stanford.edu/~jos/filters/Nonlinear_Filter_Example_Dynamic.html Albert Graef's \"faust2pd\"/examples/synth/compressor_.dsp More features: https://github.com/magnetophon/faustCompressors","title":"References"},{"location":"libs/compressors/#cocompression_gain_mono","text":"Compression-gain calculation for dynamic range compressors.","title":"(co.)compression_gain_mono"},{"location":"libs/compressors/#usage_12","text":"_ : compression_gain_mono(ratio,thresh,att,rel) : _ Where: ratio : compression ratio (1 = no compression, >1 means compression) thresh : dB level threshold above which compression kicks in (0 dB = max level) att : attack time = time constant (sec) when level & compression going up rel : release time = time constant (sec) coming out of compression","title":"Usage"},{"location":"libs/compressors/#references_12","text":"http://en.wikipedia.org/wiki/Dynamic_range_compression https://ccrma.stanford.edu/~jos/filters/Nonlinear_Filter_Example_Dynamic.html Albert Graef's \"faust2pd\"/examples/synth/compressor_.dsp More features: https://github.com/magnetophon/faustCompressors","title":"References"},{"location":"libs/compressors/#colimiter_1176_r4_mono","text":"A limiter guards against hard-clipping. It can be implemented as a compressor having a high threshold (near the clipping level), fast attack, and high ratio. Since the compression ratio is so high, some knee smoothing is desirable (for softer limiting). This example is intended to get you started using compressors as limiters, so all parameters are hardwired here to nominal values. Ratio: 4 (moderate compression) See compressor_mono() comments for a guide to other choices. Mike Shipley likes this (lowest) setting on the 1176. (Grammy award-winning mixer for Queen, Tom Petty, etc.) Thresh: -6 dB, meaning 4:1 compression begins at amplitude 1/2. Att: 800 MICROseconds (Note: scaled by ratio in the 1176) The 1176 range is said to be 20-800 microseconds. Faster attack gives \"more bite\" (e.g. on vocals), and makes hard-clipping less likely on fast overloads. Rel: 0.5 s (Note: scaled by ratio in the 1176) The 1176 range is said to be 50-1100 ms. The 1176 also has a \"bright, clear eq effect\" (use filters.lib if desired). limiter_1176_R4_mono is a standard Faust function.","title":"(co.)limiter_1176_R4_mono"},{"location":"libs/compressors/#usage_13","text":"_ : limiter_1176_R4_mono : _;","title":"Usage"},{"location":"libs/compressors/#reference","text":"http://en.wikipedia.org/wiki/1176_Peak_Limiter","title":"Reference:"},{"location":"libs/compressors/#colimiter_1176_r4_stereo","text":"A limiter guards against hard-clipping. It can be implemented as a compressor having a high threshold (near the clipping level), fast attack and release, and high ratio. Since the ratio is so high, some knee smoothing is desirable (\"soft limiting\"). This example is intended to get you started using compressor_* as a limiter, so all parameters are hardwired to nominal values here. Ratios: 4 (moderate compression), 8 (severe compression), 12 (mild limiting), or 20 to 1 (hard limiting) Att: 20-800 MICROseconds (Note: scaled by ratio in the 1176) Rel: 50-1100 ms (Note: scaled by ratio in the 1176) Mike Shipley likes 4:1 (Grammy-winning mixer for Queen, Tom Petty, etc.) Faster attack gives \"more bite\" (e.g. on vocals) He hears a bright, clear eq effect as well (not implemented here)","title":"(co.)limiter_1176_R4_stereo"},{"location":"libs/compressors/#usage_14","text":"_,_ : limiter_1176_R4_stereo : _,_;","title":"Usage"},{"location":"libs/compressors/#reference_1","text":"http://en.wikipedia.org/wiki/1176_Peak_Limiter","title":"Reference:"},{"location":"libs/compressors/#colimiter_lad_n","text":"N-channel lookahead limiter inspired by IOhannes Zm\u00f6lnig's post, which is in turn based on the thesis by Peter Falkner \"Entwicklung eines digitalen Stereo-Limiters mit Hilfe des Signalprozessors DSP56001\". This version of the limiter uses a peak-holder with smoothed attack and release based on tau time constant filters. It is also possible to use a time constant that is 2 PI tau by dividing the attack and release times by 2*PI. This time constant allows for the amplitude profile to reach 1 - e^(-2pi) of the final peak after the attack time. The input path can be delayed by the same amount as the attack time to synchronise input and amplitude profile, realising a system that is particularly effective as a colourless (ideally) brickwall limiter. Note that the effectiveness of the ceiling settings are dependent on the other parameters, especially the time constant used for the smoothing filters and the lookahead delay. Similarly, the colourless characteristics are also dependent on attack, hold, and release times. Since fluctuations above ~15 Hz are perceived as timbral effects, [Vassilakis and Kendall 2010] it is reasonable to set the attack time to 1/15 seconds for a smooth amplitude modulation. On the other hand, the hold time can be set to the peak-to-peak period of the expected lowest frequency in the signal, which allows for minimal distortion of the low frequencies. The release time can then provide a perceptually linear and gradual gain increase determined by the user for any specific application. The scaling factor for all the channels is determined by the loudest peak between them all, so that amplitude ratios between the signals are kept.","title":"(co.)limiter_lad_N"},{"location":"libs/compressors/#usage_15","text":"si.bus(N) : limiter_lad_N(N, LD, ceiling, attack, hold, release) : si.bus(N); Where: N is the number of channels, known at compile-time. LD is the lookahead delay in seconds, known at compile-time. ceiling is the linear amplitude output limit. attack is the attack time in seconds. hold is the hold time in seconds. release is the release time in seconds. Example for a stereo limiter: limiter_lad_N(2, .01, 1, .01, .1, 1);","title":"Usage"},{"location":"libs/compressors/#reference_2","text":"http://iem.at/~zmoelnig/publications/limiter/ .","title":"Reference:"},{"location":"libs/compressors/#colimiter_lad_mono","text":"Specialised case of limiter_lad_N: mono limiter.","title":"(co.)limiter_lad_mono"},{"location":"libs/compressors/#usage_16","text":"_ : limiter_lad_mono(LD, ceiling, attack, hold, release) : _; Where: LD is the lookahead delay in seconds, known at compile-time. ceiling is the linear amplitude output limit. attack is the attack time in seconds. hold is the hold time in seconds. release is the release time in seconds.","title":"Usage"},{"location":"libs/compressors/#reference_3","text":"http://iem.at/~zmoelnig/publications/limiter/ .","title":"Reference:"},{"location":"libs/compressors/#colimiter_lad_stereo","text":"Specialised case of limiter_lad_N: stereo limiter.","title":"(co.)limiter_lad_stereo"},{"location":"libs/compressors/#usage_17","text":"_ , _ : limiter_lad_stereo(LD, ceiling, attack, hold, release) : _ , _; Where: LD is the lookahead delay in seconds, known at compile-time. ceiling is the linear amplitude output limit. attack is the attack time in seconds. hold is the hold time in seconds. release is the release time in seconds.","title":"Usage"},{"location":"libs/compressors/#reference_4","text":"http://iem.at/~zmoelnig/publications/limiter/ .","title":"Reference:"},{"location":"libs/compressors/#colimiter_lad_quad","text":"Specialised case of limiter_lad_N: quadraphonic limiter.","title":"(co.)limiter_lad_quad"},{"location":"libs/compressors/#usage_18","text":"si.bus(4) : limiter_lad_quad(LD, ceiling, attack, hold, release) : si.bus(4); Where: LD is the lookahead delay in seconds, known at compile-time. ceiling is the linear amplitude output limit. attack is the attack time in seconds. hold is the hold time in seconds. release is the release time in seconds.","title":"Usage"},{"location":"libs/compressors/#reference_5","text":"http://iem.at/~zmoelnig/publications/limiter/ .","title":"Reference:"},{"location":"libs/compressors/#colimiter_lad_bw","text":"Specialised case of limiter_lad_N and ready-to-use unit-amplitude mono limiting function. This implementation, in particular, uses 2pi*tau time constant filters for attack and release smoothing with synchronised input and gain signals. This function's best application is to be used as a brickwall limiter with the least colouring artefacts while keeping a not-so-slow release curve. Tests have shown that, given a pop song with 60 dB of amplification and a 0-dB-ceiling, the loudest peak recorded was ~0.38 dB.","title":"(co.)limiter_lad_bw"},{"location":"libs/compressors/#usage_19","text":"_ : limiter_lad_bw : _;","title":"Usage"},{"location":"libs/compressors/#reference_6","text":"http://iem.at/~zmoelnig/publications/limiter/ .","title":"Reference:"},{"location":"libs/delays/","text":"delays.lib This library contains a collection of delay functions. Its official prefix is de . Basic Delay Functions (de.)delay Simple d samples delay where n is the maximum delay length as a number of samples. Unlike the @ delay operator, here the delay signal d is explicitly bounded to the interval [0..n]. The consequence is that delay will compile even if the interval of d can't be computed by the compiler. delay is a standard Faust function. Usage _ : delay(n,d) : _ Where: n : the max delay length in samples d : the delay length as a number of samples (integer) (de.)fdelay Simple d samples fractional delay based on 2 interpolated delay lines where n is the maximum delay length as a number of samples. fdelay is a standard Faust function. Usage _ : fdelay(n,d) : _ Where: n : the max delay length in samples d : the delay length as a number of samples (float) (de.)sdelay s(mooth)delay: a mono delay that doesn't click and doesn't transpose when the delay time is changed. Usage _ : sdelay(n,it,dt) : _ Where : n : the max delay length in samples it : interpolation time (in samples) for example 1024 dt : delay time (in samples) Lagrange Interpolation (de.)fdelaylti and (de.)fdelayltv Fractional delay line using Lagrange interpolation. Usage _ : fdelaylt[i|v](order, maxdelay, delay, inputsignal) : _ Where order=1,2,3,... is the order of the Lagrange interpolation polynomial. fdelaylti is most efficient, but designed for constant/slowly-varying delay. fdelayltv is more expensive and more robust when the delay varies rapidly. NOTE: The requested delay should not be less than (order-1)/2 . References https://ccrma.stanford.edu/~jos/pasp/Lagrange_Interpolation.html fixed-delay case variable-delay case Timo I. Laakso et al., \"Splitting the Unit Delay - Tools for Fractional Delay Filter Design\", IEEE Signal Processing Magazine, vol. 13, no. 1, pp. 30-60, Jan 1996. Philippe Depalle and Stephan Tassart, \"Fractional Delay Lines using Lagrange Interpolators\", ICMC Proceedings, pp. 341-343, 1996. (de.)fdelay[n] For convenience, fdelay1 , fdelay2 , fdelay3 , fdelay4 , fdelay5 are also available where n is the order of the interpolation. Thiran Allpass Interpolation Thiran Allpass Interpolation Reference https://ccrma.stanford.edu/~jos/pasp/Thiran_Allpass_Interpolators.html (de.)fdelay[n]a Delay lines interpolated using Thiran allpass interpolation. Usage _ : fdelay[N]a(maxdelay, delay, inputsignal) : _ (exactly like fdelay ) Where: N =1,2,3, or 4 is the order of the Thiran interpolation filter, and the delay argument is at least N - 1/2. Note The interpolated delay should not be less than N - 1/2 . (The allpass delay ranges from N - 1/2 to N + 1/2 .) This constraint can be alleviated by altering the code, but be aware that allpass filters approach zero delay by means of pole-zero cancellations. The delay range [N-1/2 , N+1/2] is not optimal. What is? Delay arguments too small will produce an UNSTABLE allpass! Because allpass interpolation is recursive, it is not as robust as Lagrange interpolation under time-varying conditions (You may hear clicks when changing the delay rapidly.) First-order allpass interpolation, delay d in [0.5,1.5]","title":" delays "},{"location":"libs/delays/#delayslib","text":"This library contains a collection of delay functions. Its official prefix is de .","title":"delays.lib"},{"location":"libs/delays/#basic-delay-functions","text":"","title":"Basic Delay Functions"},{"location":"libs/delays/#dedelay","text":"Simple d samples delay where n is the maximum delay length as a number of samples. Unlike the @ delay operator, here the delay signal d is explicitly bounded to the interval [0..n]. The consequence is that delay will compile even if the interval of d can't be computed by the compiler. delay is a standard Faust function.","title":"(de.)delay"},{"location":"libs/delays/#usage","text":"_ : delay(n,d) : _ Where: n : the max delay length in samples d : the delay length as a number of samples (integer)","title":"Usage"},{"location":"libs/delays/#defdelay","text":"Simple d samples fractional delay based on 2 interpolated delay lines where n is the maximum delay length as a number of samples. fdelay is a standard Faust function.","title":"(de.)fdelay"},{"location":"libs/delays/#usage_1","text":"_ : fdelay(n,d) : _ Where: n : the max delay length in samples d : the delay length as a number of samples (float)","title":"Usage"},{"location":"libs/delays/#desdelay","text":"s(mooth)delay: a mono delay that doesn't click and doesn't transpose when the delay time is changed.","title":"(de.)sdelay"},{"location":"libs/delays/#usage_2","text":"_ : sdelay(n,it,dt) : _ Where : n : the max delay length in samples it : interpolation time (in samples) for example 1024 dt : delay time (in samples)","title":"Usage"},{"location":"libs/delays/#lagrange-interpolation","text":"","title":"Lagrange Interpolation"},{"location":"libs/delays/#defdelaylti-and-defdelayltv","text":"Fractional delay line using Lagrange interpolation.","title":"(de.)fdelaylti and (de.)fdelayltv"},{"location":"libs/delays/#usage_3","text":"_ : fdelaylt[i|v](order, maxdelay, delay, inputsignal) : _ Where order=1,2,3,... is the order of the Lagrange interpolation polynomial. fdelaylti is most efficient, but designed for constant/slowly-varying delay. fdelayltv is more expensive and more robust when the delay varies rapidly. NOTE: The requested delay should not be less than (order-1)/2 .","title":"Usage"},{"location":"libs/delays/#references","text":"https://ccrma.stanford.edu/~jos/pasp/Lagrange_Interpolation.html fixed-delay case variable-delay case Timo I. Laakso et al., \"Splitting the Unit Delay - Tools for Fractional Delay Filter Design\", IEEE Signal Processing Magazine, vol. 13, no. 1, pp. 30-60, Jan 1996. Philippe Depalle and Stephan Tassart, \"Fractional Delay Lines using Lagrange Interpolators\", ICMC Proceedings, pp. 341-343, 1996.","title":"References"},{"location":"libs/delays/#defdelayn","text":"For convenience, fdelay1 , fdelay2 , fdelay3 , fdelay4 , fdelay5 are also available where n is the order of the interpolation.","title":"(de.)fdelay[n]"},{"location":"libs/delays/#thiran-allpass-interpolation","text":"Thiran Allpass Interpolation","title":"Thiran Allpass Interpolation"},{"location":"libs/delays/#reference","text":"https://ccrma.stanford.edu/~jos/pasp/Thiran_Allpass_Interpolators.html","title":"Reference"},{"location":"libs/delays/#defdelayna","text":"Delay lines interpolated using Thiran allpass interpolation.","title":"(de.)fdelay[n]a"},{"location":"libs/delays/#usage_4","text":"_ : fdelay[N]a(maxdelay, delay, inputsignal) : _ (exactly like fdelay ) Where: N =1,2,3, or 4 is the order of the Thiran interpolation filter, and the delay argument is at least N - 1/2.","title":"Usage"},{"location":"libs/delays/#note","text":"The interpolated delay should not be less than N - 1/2 . (The allpass delay ranges from N - 1/2 to N + 1/2 .) This constraint can be alleviated by altering the code, but be aware that allpass filters approach zero delay by means of pole-zero cancellations. The delay range [N-1/2 , N+1/2] is not optimal. What is? Delay arguments too small will produce an UNSTABLE allpass! Because allpass interpolation is recursive, it is not as robust as Lagrange interpolation under time-varying conditions (You may hear clicks when changing the delay rapidly.) First-order allpass interpolation, delay d in [0.5,1.5]","title":"Note"},{"location":"libs/demos/","text":"demos.lib This library contains a set of demo functions based on examples located in the /examples folder. Its official prefix is dm . Analyzers (dm.)mth_octave_spectral_level_demo Demonstrate mth_octave_spectral_level in a standalone GUI. Usage _ : mth_octave_spectral_level_demo(BandsPerOctave); _ : spectral_level_demo : _; 2/3 octave Filters (dm.)parametric_eq_demo A parametric equalizer application. Usage: _ : parametric_eq_demo : _ ; (dm.)spectral_tilt_demo A spectral tilt application. Usage _ : spectral_tilt_demo(N) : _ ; Where: N : filter order (integer) All other parameters interactive (dm.)mth_octave_filterbank_demo and (dm.)filterbank_demo Graphic Equalizer: Each filter-bank output signal routes through a fader. Usage _ : mth_octave_filterbank_demo(M) : _ _ : filterbank_demo : _ Where: N : number of bands per octave Effects (dm.)cubicnl_demo Distortion demo application. Usage: _ : cubicnl_demo : _; (dm.)gate_demo Gate demo application. Usage _,_ : gate_demo : _,_; (dm.)compressor_demo Compressor demo application. Usage _,_ : compressor_demo : _,_; (dm.)moog_vcf_demo Illustrate and compare all three Moog VCF implementations above. Usage _ : moog_vcf_demo : _; (dm.)wah4_demo Wah pedal application. Usage _ : wah4_demo : _; (dm.)crybaby_demo Crybaby effect application. Usage _ : crybaby_demo : _ ; (dm.)flanger_demo Flanger effect application. Usage _,_ : flanger_demo : _,_; (dm.)phaser2_demo Phaser effect demo application. Usage _,_ : phaser2_demo : _,_; (dm.)freeverb_demo Freeverb demo application. Usage _,_ : freeverb_demo : _,_; (dm.)stereo_reverb_tester Handy test inputs for reverberator demos below. Usage _ : stereo_reverb_tester : _ (dm.)fdnrev0_demo A reverb application using fdnrev0 . Usage _,_ : fdnrev0_demo(N,NB,BBSO) : _,_ Where: n : Feedback Delay Network (FDN) order / number of delay lines used = nb : Number of frequency bands / Number of (nearly) independent T60 controls bbso = Butterworth band-split order / order of lowpass/highpass bandsplit (dm.)zita_rev_fdn_demo Reverb demo application based on zita_rev_fdn . Usage si.bus(8) : zita_rev_fdn_demo : si.bus(8) (dm.)zita_light Light version of dm.zita_rev1 with only 2 UI elements. Usage _,_ : zita_light : _,_ (dm.)zita_rev1 Example GUI for zita_rev1_stereo (mostly following the Linux zita-rev1 GUI). Only the dry/wet and output level parameters are \"dezippered\" here. If parameters are to be varied in real time, use smooth(0.999) or the like in the same way. Usage _,_ : zita_rev1 : _,_ Reference http://www.kokkinizita.net/linuxaudio/zitarev1doc/quickguide.html Generators (dm.)sawtooth_demo An application demonstrating the different sawtooth oscillators of Faust. Usage sawtooth_demo : _ (dm.)virtual_analog_oscillator_demo Virtual analog oscillator demo application. Usage virtual_analog_oscillator_demo : _ (dm.)oscrs_demo Simple application demoing filter based oscillators. Usage oscrs_demo : _ (dm.)velvet_noise_demo Listen to velvet_noise! Usage velvet_noise_demo : _ (dm.)latch_demo Illustrate latch operation Usage echo 'import(\"stdfaust.lib\");' > latch_demo.dsp echo 'process = dm.latch_demo;' >> latch_demo.dsp faust2octave latch_demo.dsp Octave:1> plot(faustout); (dm.)envelopes_demo Illustrate various envelopes overlaid, including their gate * 1.1. Usage echo 'import(\"stdfaust.lib\");' > envelopes_demo.dsp echo 'process = dm.envelopes_demo;' >> envelopes_demo.dsp faust2octave envelopes_demo.dsp Octave:1> plot(faustout); (dm.)fft_spectral_level_demo Make a real-time spectrum analyzer using FFT from analyzers.lib Usage echo 'import(\"stdfaust.lib\");' > fft_spectral_level_demo.dsp echo 'process = dm.fft_spectral_level_demo;' >> fft_spectral_level_demo.dsp Mac: faust2caqt fft_spectral_level_demo.dsp open fft_spectral_level_demo.app Linux GTK: faust2jack fft_spectral_level_demo.dsp ./fft_spectral_level_demo Linux QT: faust2jaqt fft_spectral_level_demo.dsp ./fft_spectral_level_demo (dm.)reverse_echo_demo(nChans) Multichannel echo effect with reverse delays Usage echo 'import(\"stdfaust.lib\");' > reverse_echo_demo.dsp echo 'nChans = 3; Any integer > 1 should work here' >> reverse_echo_demo.dsp echo 'process = dm.reverse_echo_demo(nChans);' >> reverse_echo_demo.dsp Mac: faust2caqt reverse_echo_demo.dsp open reverse_echo_demo.app Linux GTK: faust2jack reverse_echo_demo.dsp ./reverse_echo_demo Linux QT: faust2jaqt reverse_echo_demo.dsp ./reverse_echo_demo Etc. (dm.)pospass_demo Use Positive-Pass Filter pospass() to frequency-shift a sine tone. First, a real sinusoid is converted to its analytic-signal form using pospass() to filter out its negative frequency component. Next, it is multiplied by a modulating complex sinusoid at the shifting frequency to create the frequency-shifted result. The real and imaginary parts are output to channels 1 & 2. For a more interesting frequency-shifting example, check the \"Use Mic\" checkbox to replace the input sinusoid by mic input. Note that frequency shifting is not the same as frequency scaling. A frequency-shifted harmonic signal is usually not harmonic. Very small frequency shifts give interesting chirp effects when there is feedback around the frequency shifter. Usage echo 'import(\"stdfaust.lib\");' > pospass_demo.dsp echo 'process = dm.pospass_demo;' >> pospass_demo.dsp Mac: faust2caqt pospass_demo.dsp open pospass_demo.app Linux GTK: faust2jack pospass_demo.dsp ./pospass_demo Linux QT: faust2jaqt pospass_demo.dsp ./pospass_demo Etc. (dm.)exciter Psychoacoustic harmonic exciter, with GUI. Usage _ : exciter : _ References https://secure.aes.org/forum/pubs/ebriefs/?elib=16939 https://www.researchgate.net/publication/258333577_Modeling_the_Harmonic_Exciter (dm.)vocoder_demo Use example of the vocoder function where an impulse train is used as excitation. Usage _ : vocoder_demo : _;","title":" demos "},{"location":"libs/demos/#demoslib","text":"This library contains a set of demo functions based on examples located in the /examples folder. Its official prefix is dm .","title":"demos.lib"},{"location":"libs/demos/#analyzers","text":"","title":"Analyzers"},{"location":"libs/demos/#dmmth_octave_spectral_level_demo","text":"Demonstrate mth_octave_spectral_level in a standalone GUI.","title":"(dm.)mth_octave_spectral_level_demo"},{"location":"libs/demos/#usage","text":"_ : mth_octave_spectral_level_demo(BandsPerOctave); _ : spectral_level_demo : _; 2/3 octave","title":"Usage"},{"location":"libs/demos/#filters","text":"","title":"Filters"},{"location":"libs/demos/#dmparametric_eq_demo","text":"A parametric equalizer application.","title":"(dm.)parametric_eq_demo"},{"location":"libs/demos/#usage_1","text":"_ : parametric_eq_demo : _ ;","title":"Usage:"},{"location":"libs/demos/#dmspectral_tilt_demo","text":"A spectral tilt application.","title":"(dm.)spectral_tilt_demo"},{"location":"libs/demos/#usage_2","text":"_ : spectral_tilt_demo(N) : _ ; Where: N : filter order (integer) All other parameters interactive","title":"Usage"},{"location":"libs/demos/#dmmth_octave_filterbank_demo-and-dmfilterbank_demo","text":"Graphic Equalizer: Each filter-bank output signal routes through a fader.","title":"(dm.)mth_octave_filterbank_demo and (dm.)filterbank_demo"},{"location":"libs/demos/#usage_3","text":"_ : mth_octave_filterbank_demo(M) : _ _ : filterbank_demo : _ Where: N : number of bands per octave","title":"Usage"},{"location":"libs/demos/#effects","text":"","title":"Effects"},{"location":"libs/demos/#dmcubicnl_demo","text":"Distortion demo application.","title":"(dm.)cubicnl_demo"},{"location":"libs/demos/#usage_4","text":"_ : cubicnl_demo : _;","title":"Usage:"},{"location":"libs/demos/#dmgate_demo","text":"Gate demo application.","title":"(dm.)gate_demo"},{"location":"libs/demos/#usage_5","text":"_,_ : gate_demo : _,_;","title":"Usage"},{"location":"libs/demos/#dmcompressor_demo","text":"Compressor demo application.","title":"(dm.)compressor_demo"},{"location":"libs/demos/#usage_6","text":"_,_ : compressor_demo : _,_;","title":"Usage"},{"location":"libs/demos/#dmmoog_vcf_demo","text":"Illustrate and compare all three Moog VCF implementations above.","title":"(dm.)moog_vcf_demo"},{"location":"libs/demos/#usage_7","text":"_ : moog_vcf_demo : _;","title":"Usage"},{"location":"libs/demos/#dmwah4_demo","text":"Wah pedal application.","title":"(dm.)wah4_demo"},{"location":"libs/demos/#usage_8","text":"_ : wah4_demo : _;","title":"Usage"},{"location":"libs/demos/#dmcrybaby_demo","text":"Crybaby effect application.","title":"(dm.)crybaby_demo"},{"location":"libs/demos/#usage_9","text":"_ : crybaby_demo : _ ;","title":"Usage"},{"location":"libs/demos/#dmflanger_demo","text":"Flanger effect application.","title":"(dm.)flanger_demo"},{"location":"libs/demos/#usage_10","text":"_,_ : flanger_demo : _,_;","title":"Usage"},{"location":"libs/demos/#dmphaser2_demo","text":"Phaser effect demo application.","title":"(dm.)phaser2_demo"},{"location":"libs/demos/#usage_11","text":"_,_ : phaser2_demo : _,_;","title":"Usage"},{"location":"libs/demos/#dmfreeverb_demo","text":"Freeverb demo application.","title":"(dm.)freeverb_demo"},{"location":"libs/demos/#usage_12","text":"_,_ : freeverb_demo : _,_;","title":"Usage"},{"location":"libs/demos/#dmstereo_reverb_tester","text":"Handy test inputs for reverberator demos below.","title":"(dm.)stereo_reverb_tester"},{"location":"libs/demos/#usage_13","text":"_ : stereo_reverb_tester : _","title":"Usage"},{"location":"libs/demos/#dmfdnrev0_demo","text":"A reverb application using fdnrev0 .","title":"(dm.)fdnrev0_demo"},{"location":"libs/demos/#usage_14","text":"_,_ : fdnrev0_demo(N,NB,BBSO) : _,_ Where: n : Feedback Delay Network (FDN) order / number of delay lines used = nb : Number of frequency bands / Number of (nearly) independent T60 controls bbso = Butterworth band-split order / order of lowpass/highpass bandsplit","title":"Usage"},{"location":"libs/demos/#dmzita_rev_fdn_demo","text":"Reverb demo application based on zita_rev_fdn .","title":"(dm.)zita_rev_fdn_demo"},{"location":"libs/demos/#usage_15","text":"si.bus(8) : zita_rev_fdn_demo : si.bus(8)","title":"Usage"},{"location":"libs/demos/#dmzita_light","text":"Light version of dm.zita_rev1 with only 2 UI elements.","title":"(dm.)zita_light"},{"location":"libs/demos/#usage_16","text":"_,_ : zita_light : _,_","title":"Usage"},{"location":"libs/demos/#dmzita_rev1","text":"Example GUI for zita_rev1_stereo (mostly following the Linux zita-rev1 GUI). Only the dry/wet and output level parameters are \"dezippered\" here. If parameters are to be varied in real time, use smooth(0.999) or the like in the same way.","title":"(dm.)zita_rev1"},{"location":"libs/demos/#usage_17","text":"_,_ : zita_rev1 : _,_","title":"Usage"},{"location":"libs/demos/#reference","text":"http://www.kokkinizita.net/linuxaudio/zitarev1doc/quickguide.html","title":"Reference"},{"location":"libs/demos/#generators","text":"","title":"Generators"},{"location":"libs/demos/#dmsawtooth_demo","text":"An application demonstrating the different sawtooth oscillators of Faust.","title":"(dm.)sawtooth_demo"},{"location":"libs/demos/#usage_18","text":"sawtooth_demo : _","title":"Usage"},{"location":"libs/demos/#dmvirtual_analog_oscillator_demo","text":"Virtual analog oscillator demo application.","title":"(dm.)virtual_analog_oscillator_demo"},{"location":"libs/demos/#usage_19","text":"virtual_analog_oscillator_demo : _","title":"Usage"},{"location":"libs/demos/#dmoscrs_demo","text":"Simple application demoing filter based oscillators.","title":"(dm.)oscrs_demo"},{"location":"libs/demos/#usage_20","text":"oscrs_demo : _","title":"Usage"},{"location":"libs/demos/#dmvelvet_noise_demo","text":"Listen to velvet_noise!","title":"(dm.)velvet_noise_demo"},{"location":"libs/demos/#usage_21","text":"velvet_noise_demo : _","title":"Usage"},{"location":"libs/demos/#dmlatch_demo","text":"Illustrate latch operation","title":"(dm.)latch_demo"},{"location":"libs/demos/#usage_22","text":"echo 'import(\"stdfaust.lib\");' > latch_demo.dsp echo 'process = dm.latch_demo;' >> latch_demo.dsp faust2octave latch_demo.dsp Octave:1> plot(faustout);","title":"Usage"},{"location":"libs/demos/#dmenvelopes_demo","text":"Illustrate various envelopes overlaid, including their gate * 1.1.","title":"(dm.)envelopes_demo"},{"location":"libs/demos/#usage_23","text":"echo 'import(\"stdfaust.lib\");' > envelopes_demo.dsp echo 'process = dm.envelopes_demo;' >> envelopes_demo.dsp faust2octave envelopes_demo.dsp Octave:1> plot(faustout);","title":"Usage"},{"location":"libs/demos/#dmfft_spectral_level_demo","text":"Make a real-time spectrum analyzer using FFT from analyzers.lib","title":"(dm.)fft_spectral_level_demo"},{"location":"libs/demos/#usage_24","text":"echo 'import(\"stdfaust.lib\");' > fft_spectral_level_demo.dsp echo 'process = dm.fft_spectral_level_demo;' >> fft_spectral_level_demo.dsp Mac: faust2caqt fft_spectral_level_demo.dsp open fft_spectral_level_demo.app Linux GTK: faust2jack fft_spectral_level_demo.dsp ./fft_spectral_level_demo Linux QT: faust2jaqt fft_spectral_level_demo.dsp ./fft_spectral_level_demo","title":"Usage"},{"location":"libs/demos/#dmreverse_echo_demonchans","text":"Multichannel echo effect with reverse delays","title":"(dm.)reverse_echo_demo(nChans)"},{"location":"libs/demos/#usage_25","text":"echo 'import(\"stdfaust.lib\");' > reverse_echo_demo.dsp echo 'nChans = 3; Any integer > 1 should work here' >> reverse_echo_demo.dsp echo 'process = dm.reverse_echo_demo(nChans);' >> reverse_echo_demo.dsp Mac: faust2caqt reverse_echo_demo.dsp open reverse_echo_demo.app Linux GTK: faust2jack reverse_echo_demo.dsp ./reverse_echo_demo Linux QT: faust2jaqt reverse_echo_demo.dsp ./reverse_echo_demo Etc.","title":"Usage"},{"location":"libs/demos/#dmpospass_demo","text":"Use Positive-Pass Filter pospass() to frequency-shift a sine tone. First, a real sinusoid is converted to its analytic-signal form using pospass() to filter out its negative frequency component. Next, it is multiplied by a modulating complex sinusoid at the shifting frequency to create the frequency-shifted result. The real and imaginary parts are output to channels 1 & 2. For a more interesting frequency-shifting example, check the \"Use Mic\" checkbox to replace the input sinusoid by mic input. Note that frequency shifting is not the same as frequency scaling. A frequency-shifted harmonic signal is usually not harmonic. Very small frequency shifts give interesting chirp effects when there is feedback around the frequency shifter.","title":"(dm.)pospass_demo"},{"location":"libs/demos/#usage_26","text":"echo 'import(\"stdfaust.lib\");' > pospass_demo.dsp echo 'process = dm.pospass_demo;' >> pospass_demo.dsp Mac: faust2caqt pospass_demo.dsp open pospass_demo.app Linux GTK: faust2jack pospass_demo.dsp ./pospass_demo Linux QT: faust2jaqt pospass_demo.dsp ./pospass_demo Etc.","title":"Usage"},{"location":"libs/demos/#dmexciter","text":"Psychoacoustic harmonic exciter, with GUI.","title":"(dm.)exciter"},{"location":"libs/demos/#usage_27","text":"_ : exciter : _","title":"Usage"},{"location":"libs/demos/#references","text":"https://secure.aes.org/forum/pubs/ebriefs/?elib=16939 https://www.researchgate.net/publication/258333577_Modeling_the_Harmonic_Exciter","title":"References"},{"location":"libs/demos/#dmvocoder_demo","text":"Use example of the vocoder function where an impulse train is used as excitation.","title":"(dm.)vocoder_demo"},{"location":"libs/demos/#usage_28","text":"_ : vocoder_demo : _;","title":"Usage"},{"location":"libs/dx7/","text":"dx7.lib Yamaha DX7 emulation library. Its official prefix is dx . (dx.)dx7_ampf DX7 amplitude conversion function. 3 versions of this function are available: dx7_amp_bpf : BPF version (same as in the CSOUND toolkit) dx7_amp_func : estimated mathematical equivalent of dx7_amp_bpf dx7_ampf : default (sugar for dx7_amp_func ) Usage: dx7AmpPreset : dx7_ampf_bpf : _ Where: dx7AmpPreset : DX7 amplitude value (0-99) (dx.)dx7_egraterisef DX7 envelope generator rise conversion function. 3 versions of this function are available: dx7_egraterise_bpf : BPF version (same as in the CSOUND toolkit) dx7_egraterise_func : estimated mathematical equivalent of dx7_egraterise_bpf dx7_egraterisef : default (sugar for dx7_egraterise_func ) Usage: dx7envelopeRise : dx7_egraterisef : _ Where: dx7envelopeRise : DX7 envelope rise value (0-99) (dx.)dx7_egraterisepercf DX7 envelope generator percussive rise conversion function. 3 versions of this function are available: dx7_egrateriseperc_bpf : BPF version (same as in the CSOUND toolkit) dx7_egrateriseperc_func : estimated mathematical equivalent of dx7_egrateriseperc_bpf dx7_egraterisepercf : default (sugar for dx7_egrateriseperc_func ) Usage: dx7envelopePercRise : dx7_egraterisepercf : _ Where: dx7envelopePercRise : DX7 envelope percussive rise value (0-99) (dx.)dx7_egratedecayf DX7 envelope generator decay conversion function. 3 versions of this function are available: dx7_egratedecay_bpf : BPF version (same as in the CSOUND toolkit) dx7_egratedecay_func : estimated mathematical equivalent of dx7_egratedecay_bpf dx7_egratedecayf : default (sugar for dx7_egratedecay_func ) Usage: dx7envelopeDecay : dx7_egratedecayf : _ Where: dx7envelopeDecay : DX7 envelope decay value (0-99) (dx.)dx7_egratedecaypercf DX7 envelope generator percussive decay conversion function. 3 versions of this function are available: dx7_egratedecayperc_bpf : BPF version (same as in the CSOUND toolkit) dx7_egratedecayperc_func : estimated mathematical equivalent of dx7_egratedecayperc_bpf dx7_egratedecaypercf : default (sugar for dx7_egratedecayperc_func ) Usage: dx7envelopePercDecay : dx7_egratedecaypercf : _ Where: dx7envelopePercDecay : DX7 envelope decay value (0-99) (dx.)dx7_eglv2peakf DX7 envelope level to peak conversion function. 3 versions of this function are available: dx7_eglv2peak_bpf : BPF version (same as in the CSOUND toolkit) dx7_eglv2peak_func : estimated mathematical equivalent of dx7_eglv2peak_bpf dx7_eglv2peakf : default (sugar for dx7_eglv2peak_func ) Usage: dx7Level : dx7_eglv2peakf : _ Where: dx7Level : DX7 level value (0-99) (dx.)dx7_velsensf DX7 velocity sensitivity conversion function. Usage: dx7Velocity : dx7_velsensf : _ Where: dx7Velocity : DX7 level value (0-8) (dx.)dx7_fdbkscalef DX7 feedback scaling conversion function. Usage: dx7Feedback : dx7_fdbkscalef : _ Where: dx7Feedback : DX7 feedback value (dx.)dx7_op DX7 Operator. Implements a phase-modulable sine wave oscillator connected to a DX7 envelope generator. Usage: dx7_op(freq,phaseMod,outLev,R1,R2,R3,R4,L1,L2,L3,L4,keyVel,rateScale,type,gain,gate) : _ Where: freq : frequency of the oscillator phaseMod : phase deviation (-1 - 1) outLev : preset output level (0-99) R1 : preset envelope rate 1 (0-99) R2 : preset envelope rate 2 (0-99) R3 : preset envelope rate 3 (0-99) R4 : preset envelope rate 4 (0-99) L1 : preset envelope level 1 (0-99) L2 : preset envelope level 2 (0-99) L3 : preset envelope level 3 (0-99) L4 : preset envelope level 4 (0-99) keyVel : preset key velocity sensitivity (0-99) rateScale : preset envelope rate scale type : preset operator type gain : general gain gate : trigger signal (dx.)dx7_algo DX7 algorithms. Implements the 32 DX7 algorithms (a quick Google search should give your more details on this). Each algorithm uses 6 operators. Usage: dx7_algo(algN,egR1,egR2,egR3,egR4,egL1,egL2,egL3,egL4,outLevel,keyVelSens,ampModSens,opMode,opFreq,opDetune,opRateScale,feedback,lfoDelay,lfoDepth,lfoSpeed,freq,gain,gate) : _ Where: algN : algorithm number (0-31, should be an int...) egR1 : preset envelope rates 1 (a list of 6 values between 0-99) egR2 : preset envelope rates 2 (a list of 6 values between 0-99) egR3 : preset envelope rates 3 (a list of 6 values between 0-99) egR4 : preset envelope rates 4 (a list of 6 values between 0-99) egL1 : preset envelope levels 1 (a list of 6 values between 0-99) egL2 : preset envelope levels 2 (a list of 6 values between 0-99) egL3 : preset envelope levels 3 (a list of 6 values between 0-99) egL4 : preset envelope levels 4 (a list of 6 values between 0-99) outLev : preset output levels (a list of 6 values between 0-99) keyVel : preset key velocity sensitivities (a list of 6 values between 0-99) ampModSens : preset amplitude sensitivities (a list of 6 values between 0-99) opMode : preset operator mode (a list of 6 values between 0-1) opFreq : preset operator frequencies (a list of 6 values between 0-99) opDetune : preset operator detuning (a list of 6 values between 0-99) opRateScale : preset operator rate scale (a list of 6 values between 0-99) feedback : preset operator feedback (a list of 6 values between 0-99) lfoDelay : preset LFO delay (a list of 6 values between 0-99) lfoDepth : preset LFO depth (a list of 6 values between 0-99) lfoSpeed : preset LFO speed (a list of 6 values between 0-99) freq : fundamental frequency gain : general gain gate : trigger signal (dx.)dx7_ui Generic DX7 function where all parameters are controllable using UI elements. The master-with-mute branch must be used for this function to work... This function is MIDI-compatible. Usage dx7_ui : _","title":" dx7 "},{"location":"libs/dx7/#dx7lib","text":"Yamaha DX7 emulation library. Its official prefix is dx .","title":"dx7.lib"},{"location":"libs/dx7/#dxdx7_ampf","text":"DX7 amplitude conversion function. 3 versions of this function are available: dx7_amp_bpf : BPF version (same as in the CSOUND toolkit) dx7_amp_func : estimated mathematical equivalent of dx7_amp_bpf dx7_ampf : default (sugar for dx7_amp_func )","title":"(dx.)dx7_ampf"},{"location":"libs/dx7/#usage","text":"dx7AmpPreset : dx7_ampf_bpf : _ Where: dx7AmpPreset : DX7 amplitude value (0-99)","title":"Usage:"},{"location":"libs/dx7/#dxdx7_egraterisef","text":"DX7 envelope generator rise conversion function. 3 versions of this function are available: dx7_egraterise_bpf : BPF version (same as in the CSOUND toolkit) dx7_egraterise_func : estimated mathematical equivalent of dx7_egraterise_bpf dx7_egraterisef : default (sugar for dx7_egraterise_func )","title":"(dx.)dx7_egraterisef"},{"location":"libs/dx7/#usage_1","text":"dx7envelopeRise : dx7_egraterisef : _ Where: dx7envelopeRise : DX7 envelope rise value (0-99)","title":"Usage:"},{"location":"libs/dx7/#dxdx7_egraterisepercf","text":"DX7 envelope generator percussive rise conversion function. 3 versions of this function are available: dx7_egrateriseperc_bpf : BPF version (same as in the CSOUND toolkit) dx7_egrateriseperc_func : estimated mathematical equivalent of dx7_egrateriseperc_bpf dx7_egraterisepercf : default (sugar for dx7_egrateriseperc_func )","title":"(dx.)dx7_egraterisepercf"},{"location":"libs/dx7/#usage_2","text":"dx7envelopePercRise : dx7_egraterisepercf : _ Where: dx7envelopePercRise : DX7 envelope percussive rise value (0-99)","title":"Usage:"},{"location":"libs/dx7/#dxdx7_egratedecayf","text":"DX7 envelope generator decay conversion function. 3 versions of this function are available: dx7_egratedecay_bpf : BPF version (same as in the CSOUND toolkit) dx7_egratedecay_func : estimated mathematical equivalent of dx7_egratedecay_bpf dx7_egratedecayf : default (sugar for dx7_egratedecay_func )","title":"(dx.)dx7_egratedecayf"},{"location":"libs/dx7/#usage_3","text":"dx7envelopeDecay : dx7_egratedecayf : _ Where: dx7envelopeDecay : DX7 envelope decay value (0-99)","title":"Usage:"},{"location":"libs/dx7/#dxdx7_egratedecaypercf","text":"DX7 envelope generator percussive decay conversion function. 3 versions of this function are available: dx7_egratedecayperc_bpf : BPF version (same as in the CSOUND toolkit) dx7_egratedecayperc_func : estimated mathematical equivalent of dx7_egratedecayperc_bpf dx7_egratedecaypercf : default (sugar for dx7_egratedecayperc_func )","title":"(dx.)dx7_egratedecaypercf"},{"location":"libs/dx7/#usage_4","text":"dx7envelopePercDecay : dx7_egratedecaypercf : _ Where: dx7envelopePercDecay : DX7 envelope decay value (0-99)","title":"Usage:"},{"location":"libs/dx7/#dxdx7_eglv2peakf","text":"DX7 envelope level to peak conversion function. 3 versions of this function are available: dx7_eglv2peak_bpf : BPF version (same as in the CSOUND toolkit) dx7_eglv2peak_func : estimated mathematical equivalent of dx7_eglv2peak_bpf dx7_eglv2peakf : default (sugar for dx7_eglv2peak_func )","title":"(dx.)dx7_eglv2peakf"},{"location":"libs/dx7/#usage_5","text":"dx7Level : dx7_eglv2peakf : _ Where: dx7Level : DX7 level value (0-99)","title":"Usage:"},{"location":"libs/dx7/#dxdx7_velsensf","text":"DX7 velocity sensitivity conversion function.","title":"(dx.)dx7_velsensf"},{"location":"libs/dx7/#usage_6","text":"dx7Velocity : dx7_velsensf : _ Where: dx7Velocity : DX7 level value (0-8)","title":"Usage:"},{"location":"libs/dx7/#dxdx7_fdbkscalef","text":"DX7 feedback scaling conversion function.","title":"(dx.)dx7_fdbkscalef"},{"location":"libs/dx7/#usage_7","text":"dx7Feedback : dx7_fdbkscalef : _ Where: dx7Feedback : DX7 feedback value","title":"Usage:"},{"location":"libs/dx7/#dxdx7_op","text":"DX7 Operator. Implements a phase-modulable sine wave oscillator connected to a DX7 envelope generator.","title":"(dx.)dx7_op"},{"location":"libs/dx7/#usage_8","text":"dx7_op(freq,phaseMod,outLev,R1,R2,R3,R4,L1,L2,L3,L4,keyVel,rateScale,type,gain,gate) : _ Where: freq : frequency of the oscillator phaseMod : phase deviation (-1 - 1) outLev : preset output level (0-99) R1 : preset envelope rate 1 (0-99) R2 : preset envelope rate 2 (0-99) R3 : preset envelope rate 3 (0-99) R4 : preset envelope rate 4 (0-99) L1 : preset envelope level 1 (0-99) L2 : preset envelope level 2 (0-99) L3 : preset envelope level 3 (0-99) L4 : preset envelope level 4 (0-99) keyVel : preset key velocity sensitivity (0-99) rateScale : preset envelope rate scale type : preset operator type gain : general gain gate : trigger signal","title":"Usage:"},{"location":"libs/dx7/#dxdx7_algo","text":"DX7 algorithms. Implements the 32 DX7 algorithms (a quick Google search should give your more details on this). Each algorithm uses 6 operators.","title":"(dx.)dx7_algo"},{"location":"libs/dx7/#usage_9","text":"dx7_algo(algN,egR1,egR2,egR3,egR4,egL1,egL2,egL3,egL4,outLevel,keyVelSens,ampModSens,opMode,opFreq,opDetune,opRateScale,feedback,lfoDelay,lfoDepth,lfoSpeed,freq,gain,gate) : _ Where: algN : algorithm number (0-31, should be an int...) egR1 : preset envelope rates 1 (a list of 6 values between 0-99) egR2 : preset envelope rates 2 (a list of 6 values between 0-99) egR3 : preset envelope rates 3 (a list of 6 values between 0-99) egR4 : preset envelope rates 4 (a list of 6 values between 0-99) egL1 : preset envelope levels 1 (a list of 6 values between 0-99) egL2 : preset envelope levels 2 (a list of 6 values between 0-99) egL3 : preset envelope levels 3 (a list of 6 values between 0-99) egL4 : preset envelope levels 4 (a list of 6 values between 0-99) outLev : preset output levels (a list of 6 values between 0-99) keyVel : preset key velocity sensitivities (a list of 6 values between 0-99) ampModSens : preset amplitude sensitivities (a list of 6 values between 0-99) opMode : preset operator mode (a list of 6 values between 0-1) opFreq : preset operator frequencies (a list of 6 values between 0-99) opDetune : preset operator detuning (a list of 6 values between 0-99) opRateScale : preset operator rate scale (a list of 6 values between 0-99) feedback : preset operator feedback (a list of 6 values between 0-99) lfoDelay : preset LFO delay (a list of 6 values between 0-99) lfoDepth : preset LFO depth (a list of 6 values between 0-99) lfoSpeed : preset LFO speed (a list of 6 values between 0-99) freq : fundamental frequency gain : general gain gate : trigger signal","title":"Usage:"},{"location":"libs/dx7/#dxdx7_ui","text":"Generic DX7 function where all parameters are controllable using UI elements. The master-with-mute branch must be used for this function to work... This function is MIDI-compatible.","title":"(dx.)dx7_ui"},{"location":"libs/dx7/#usage_10","text":"dx7_ui : _","title":"Usage"},{"location":"libs/envelopes/","text":"envelopes.lib This library contains a collection of envelope generators. Its official prefix is en . Functions Reference (en.)smoothEnvelope An envelope with an exponential attack and release. smoothEnvelope is a standard Faust function. Usage smoothEnvelope(ar,t) : _ ar : attack and release duration (s) t : trigger signal (attack is triggered when t>0 , release is triggered when t=0 ) (en.)ar AR (Attack, Release) envelope generator (useful to create percussion envelopes). ar is a standard Faust function. Usage ar(at,rt,t) : _ Where: at : attack (sec) rt : release (sec) t : trigger signal (attack is triggered when t>0 , release is triggered when t=0 ) (en.)arfe ARFE (Attack and Release-to-Final-value Exponentially) envelope generator. Approximately equal to smoothEnvelope(Attack/6.91) when Attack == Release. Usage arfe(a,r,f,t) : _ Where: a , r : attack (sec), release (sec) f : final value to approach upon release (such as 0) t : trigger signal (attack is triggered when t>0 , release is triggered when t=0 ) (en.)are ARE (Attack, Release) envelope generator with Exponential segments. Approximately equal to smoothEnvelope(Attack/6.91) when Attack == Release. Usage are(a,r,t) : _ Where: a : attack (sec) r : release (sec) t : trigger signal (attack is triggered when t>0 , release is triggered when t=0 ) (en.)asr ASR (Attack, Sustain, Release) envelope generator. asr is a standard Faust function. Usage asr(at,sl,rt,t) : _ Where: at : attack (sec) sl : sustain level (between 0..1) r : release (sec) t : trigger signal (attack is triggered when t>0 , release is triggered when t=0 ) (en.)adsr ADSR (Attack, Decay, Sustain, Release) envelope generator. adsr is a standard Faust function. Usage adsr(at,dt,sl,rt,gate) : _ Where: at : attack time (sec) dt : decay time (sec) sl : sustain level (between 0..1) rt : release time (sec) gate : trigger signal (attack is triggered when gate>0 , release is triggered when gate=0 ) (en.)adsre ADSRE (Attack, Decay, Sustain, Release) envelope generator with Exponential segments. Usage adsre(a,d,s,r,g) : _ Where: a : attack (sec) d : decay (sec) s : sustain (fraction of t : 0-1) r : release (sec) g : gate signal: attack is triggered when g goes from zero to positive, release is triggered when g returns to 0 (en.)asre ASRE (Attack, Sustain, Release) envelope generator with Exponential segments. Usage asre(a,s,r,g) : _ Where: a : attack (sec) s : sustain (fraction of t : 0-1) r : release (sec) t : trigger signal (attack is triggered when t>0 , release is triggered when t=0 ) (en.)dx7envelope DX7 operator envelope generator with 4 independent rates and levels. It is essentially a 4 points BPF. Usage dx7_envelope(R1,R2,R3,R4,L1,L2,L3,L4,t) : _ Where: RN : rates in seconds LN : levels (0-1) t : trigger signal","title":" envelopes "},{"location":"libs/envelopes/#envelopeslib","text":"This library contains a collection of envelope generators. Its official prefix is en .","title":"envelopes.lib"},{"location":"libs/envelopes/#functions-reference","text":"","title":"Functions Reference"},{"location":"libs/envelopes/#ensmoothenvelope","text":"An envelope with an exponential attack and release. smoothEnvelope is a standard Faust function.","title":"(en.)smoothEnvelope"},{"location":"libs/envelopes/#usage","text":"smoothEnvelope(ar,t) : _ ar : attack and release duration (s) t : trigger signal (attack is triggered when t>0 , release is triggered when t=0 )","title":"Usage"},{"location":"libs/envelopes/#enar","text":"AR (Attack, Release) envelope generator (useful to create percussion envelopes). ar is a standard Faust function.","title":"(en.)ar"},{"location":"libs/envelopes/#usage_1","text":"ar(at,rt,t) : _ Where: at : attack (sec) rt : release (sec) t : trigger signal (attack is triggered when t>0 , release is triggered when t=0 )","title":"Usage"},{"location":"libs/envelopes/#enarfe","text":"ARFE (Attack and Release-to-Final-value Exponentially) envelope generator. Approximately equal to smoothEnvelope(Attack/6.91) when Attack == Release.","title":"(en.)arfe"},{"location":"libs/envelopes/#usage_2","text":"arfe(a,r,f,t) : _ Where: a , r : attack (sec), release (sec) f : final value to approach upon release (such as 0) t : trigger signal (attack is triggered when t>0 , release is triggered when t=0 )","title":"Usage"},{"location":"libs/envelopes/#enare","text":"ARE (Attack, Release) envelope generator with Exponential segments. Approximately equal to smoothEnvelope(Attack/6.91) when Attack == Release.","title":"(en.)are"},{"location":"libs/envelopes/#usage_3","text":"are(a,r,t) : _ Where: a : attack (sec) r : release (sec) t : trigger signal (attack is triggered when t>0 , release is triggered when t=0 )","title":"Usage"},{"location":"libs/envelopes/#enasr","text":"ASR (Attack, Sustain, Release) envelope generator. asr is a standard Faust function.","title":"(en.)asr"},{"location":"libs/envelopes/#usage_4","text":"asr(at,sl,rt,t) : _ Where: at : attack (sec) sl : sustain level (between 0..1) r : release (sec) t : trigger signal (attack is triggered when t>0 , release is triggered when t=0 )","title":"Usage"},{"location":"libs/envelopes/#enadsr","text":"ADSR (Attack, Decay, Sustain, Release) envelope generator. adsr is a standard Faust function.","title":"(en.)adsr"},{"location":"libs/envelopes/#usage_5","text":"adsr(at,dt,sl,rt,gate) : _ Where: at : attack time (sec) dt : decay time (sec) sl : sustain level (between 0..1) rt : release time (sec) gate : trigger signal (attack is triggered when gate>0 , release is triggered when gate=0 )","title":"Usage"},{"location":"libs/envelopes/#enadsre","text":"ADSRE (Attack, Decay, Sustain, Release) envelope generator with Exponential segments.","title":"(en.)adsre"},{"location":"libs/envelopes/#usage_6","text":"adsre(a,d,s,r,g) : _ Where: a : attack (sec) d : decay (sec) s : sustain (fraction of t : 0-1) r : release (sec) g : gate signal: attack is triggered when g goes from zero to positive, release is triggered when g returns to 0","title":"Usage"},{"location":"libs/envelopes/#enasre","text":"ASRE (Attack, Sustain, Release) envelope generator with Exponential segments.","title":"(en.)asre"},{"location":"libs/envelopes/#usage_7","text":"asre(a,s,r,g) : _ Where: a : attack (sec) s : sustain (fraction of t : 0-1) r : release (sec) t : trigger signal (attack is triggered when t>0 , release is triggered when t=0 )","title":"Usage"},{"location":"libs/envelopes/#endx7envelope","text":"DX7 operator envelope generator with 4 independent rates and levels. It is essentially a 4 points BPF.","title":"(en.)dx7envelope"},{"location":"libs/envelopes/#usage_8","text":"dx7_envelope(R1,R2,R3,R4,L1,L2,L3,L4,t) : _ Where: RN : rates in seconds LN : levels (0-1) t : trigger signal","title":"Usage"},{"location":"libs/fds/","text":"fds.lib This library allows to build linear, explicit finite difference schemes physical models in 1 or 2 dimensions using an approach based on the cellular automata formalism. Its official prefix is fd . In order to use the library, one needs to discretize the linear partial differential equation of the desired system both at boundaries and in-between them, thus obtaining a set of explicit recursion relations. Each one of these will provide, for each spatial point the scalar coefficients to be multiplied by the states of the current and past neighbour points. Coefficients need to be stacked in parallel in order to form a coefficients matrix for each point in the mesh. It is necessary to provide one matrix for coefficients matrices are defined, they need to be placed in parallel and ordered following the desired mesh structure (i.e., coefficients for the top left boundaries will come first, while bottom right boundaries will come last), to form a coefficients scheme , which can be used with the library functions. Sources Here are listed some works on finite difference schemes and cellular automata thet were the basis for the implementation of this library S. Bilbao, Numerical Sound Synthesis.Chichester, UK: John Wiley Sons, Ltd, 2009 P. Narbel, \"Qualitative and quantitative cellular automata from differential equations,\" Lecture Notes in Computer Science, vol. 4173, pp. 112\u2013121, 10 2006 X.-S. Yang and Y. Young, Cellular Automata, PDEs, and Pattern Formation. Chapman & Hall/CRC, 092005, ch. 18, pp. 271\u2013282. Model Construction Once the coefficients scheme is defined, the user can simply call one of these functions to obtain a fully working physical model. They expect to receive a force input signal for each mesh point and output the state of each point. Interpolation operators can be used to drive external forces to the desired points, and to get the signal only from a certain area of the mesh. (fd.)model1D This function can be used to obtain a physical model in 1 dimension. Takes a force input signal for each point and outputs the state of each point. Usage si.bus(points) : model1D(points,R,T,scheme) : si.bus(points) Where: points : size of the mesh in points R : neighbourhood radius, indicates how many side points are needed (i.e. if R=1 the mesh depends on one point on the left and one on the right) T : time coefficient, indicates how much steps back in time are needed (i. e. if T=1 the maximum delay needed for a neighbour state is 1 sample) scheme : coefficients scheme (fd.)model2D This function can be used to obtain a physical model in 2 dimension. Takes a force input signal for each point and outputs the state of each point. IMPORTANT: 2D models with more than 30x20 points might crash the c++ compiler. 2D models need to be compiled with the command line compiler, the online one presents some issues. Usage si.bus(pointsX*pointsY) : model2D(pointsX,pointsY,R,T,scheme) : si.bus(pointsX*pointsY) Where: pointsX : horizontal size of the mesh in points pointsY : vertical size of the mesh in points R : neighbourhood radius, indicates how many side points are needed (i.e. if R=1 the mesh depends on one point on the left and one on the right) T : time coefficient, indicates how much steps back in time are needed (i. e. if T=1 the maximum delay needed for a neighbour state is 1 sample) scheme : coefficients scheme Interpolation Interpolation functions can be used to drive the input signals to the correct mesh points, or to get the output signal from the desired points. All the interpolation functions allow to change the input/output points at run time. In general, all these functions get in input a number of connections, and output the same number of connections, where each signal is multiplied by zero except the ones specified by the arguments. (fd.)stairsInterp1D Stairs interpolator in 1 dimension. Takes a number of signals and outputs the same number of signals, where each one is multiplied by zero except the one specified by the argument. This can vary at run time (i.e. a slider), but must be an integer. Usage si.bus(points) : stairsInterp1D(points,point) : si.bus(points) Where: points : total number of points in the mesh point : number of the desired nonzero signal (fd.)stairsInterp2D Stairs interpolator in 2 dimensions. Similar to the 1-D version. Usage si.bus(pointsX*pointsY) : stairsInterp2D(pointsX,pointsY,pointX,pointY) : si.bus(pointsX*pointsY) Where: pointsX : total number of points in the X direction pointsY : total number of points in the Y direction pointX : horizontal index of the desired nonzero signal pointY : vertical index of the desired nonzero signal (fd.)linInterp1D Linear interpolator in 1 dimension. Takes a number of signals and outputs the same number of signals, where each one is multiplied by zero except two signals around a floating point index. This is essentially a Faust implementation of the $J(x_i)$ operator, not scaled by the spatial step. (see Stefan Bilbao's book, Numerical Sound Synthesis). The index can vary at run time. Usage si.bus(points) : linInterp1D(points,point) : si.bus(points) Where: points : total number of points in the mesh point : floating point index (fd.)linInterp2D Linear interpolator in 2 dimensions. Similar to the 1 D version. Usage si.bus(pointsX*pointsY) : linInterp2D(pointsX,pointsY,pointX,pointY) : si.bus(pointsX*pointsY) Where: pointsX : total number of points in the X direction pointsY : total number of points in the Y direction pointX : horizontal float index pointY : vertical float index (fd.)stairsInterp1DOut Stairs interpolator in 1 dimension. Similar to stairsInterp1D, except it outputs only the desired signal. Usage si.bus(points) : stairsInterp1DOut(points,point) : _ Where: points : total number of points in the mesh point : number of the desired nonzero signal (fd.)stairsInterp2DOut Stairs interpolator in 2 dimensions which outputs only one signal. Usage si.bus(pointsX*pointsY) : stairsInterp2DOut(pointsX,pointsY,pointX,pointY) : _ Where: pointsX : total number of points in the X direction pointsY : total number of points in the Y direction pointX : horizontal index of the desired nonzero signal pointY : vertical index of the desired nonzero signal (fd.)linInterp1DOut Linear interpolator in 1 dimension. Similar to stairsInterp1D, except it sums each output signal and provides only one output value. Usage si.bus(points) : linInterp1DOut(points,point) : _ Where: points : total number of points in the mesh point : floating point index (fd.)stairsInterp2DOut Linear interpolator in 2 dimensions which outputs only one signal. Usage si.bus(pointsX*pointsY) : linInterp2DOut(pointsX,pointsY,pointX,pointY) : _ Where: pointsX : total number of points in the X direction pointsY : total number of points in the Y direction pointX : horizontal float index pointY : vertical float index Routing The routing functions are used internally by the model building functions, but can also be taken separately. These functions route the forces, the coefficients scheme and the neighbours\u2019 signals into the correct scheme points and take as input, in this order: the coefficients block, the feedback signals and the forces. In output they provide, in order, for each scheme point: the force signal, the coefficient matrices and the neighbours\u2019 signals. These functions are based on the Faust route primitive. (fd.)route1D Routing function for 1 dimensional schemes. Usage si.bus((2*R+1)*(T+1)*points),si.bus(points*2) : route1D(points, R, T) : si.bus((1 + ((2*R+1)*(T+1)) + (2*R+1))*points) Where: points : total number of points in the mesh R : neighbourhood radius T : time coefficient (fd.)route2D Routing function for 2 dimensional schemes. Usage si.bus((2*R+1)^2*(T+1)*pointsX*pointsY),si.bus(pointsX*pointsY*2) : route2D(pointsX, pointsY, R, T) : si.bus((1 + ((2*R+1)^2*(T+1)) + (2*R+1)^2)*pointsX*pointsY) Where: pointsX : total number of points in the X direction pointsY : total number of points in the Y direction R : neighbourhood radius T : time coefficient Scheme Operations The scheme operation functions are used internally by the model building functions but can also be taken separately. The schemePoint function is where the update equation is actually calculated. The buildScheme functions are used to stack in parallel several schemePoint blocks, according to the choosed mesh size. (fd.)schemePoint This function calculates the next state for each mesh point, in order to form a scheme, several of these blocks need to be stacked in parallel. This function takes in input, in order, the force, the coefficient matrices and the neighbours\u2019 signals and outputs the next point state. Usage _,si.bus((2*R+1)^D*(T+1)),si.bus((2*R+1)^D) : schemePoint(R,T,D) : _ Where: R : neighbourhood radius T : time coefficient D : scheme spatial dimensions (i.e. 1 if 1-D, 2 if 2-D) (fd.)buildScheme1D This function is used to stack in parallel several schemePoint functions in 1 dimension, according to the number of points. Usage si.bus((1 + ((2*R+1)*(T+1)) + (2*R+1))*points) : buildScheme1D(points,R,T) : si.bus(points) Where: points : total number of points in the mesh R : neighbourhood radius T : time coefficient (fd.)buildScheme2D This function is used to stack in parallel several schemePoint functions in 2 dimensions, according to the number of points in the X and Y directions. Usage si.bus((1 + ((2*R+1)^2*(T+1)) + (2*R+1)^2)*pointsX*pointsY) : buildScheme2D(pointsX,pointsY,R,T) : si.bus(pointsX*pointsY) Where: pointsX : total number of points in the X direction pointsY : total number of points in the Y direction R : neighbourhood radius T : time coefficient Interaction Models Here are defined two physically based interaction algorithms: a hammer and a bow. These functions need to be coupled to the mesh pde, in the point where the interaction happens: to do so, the mesh output signals can be fed back and driven into the force block using the interpolation operators. The latters can be also used to drive the single force output signal to the correct scheme points. (fd.)hammer Implementation of a nonlinear collision model. The hammer is essentially a finite difference scheme of a linear damped oscillator, which is coupled with the mesh through the collision model (see Stefan Bilbao's book, Numerical Sound Synthesis). Usage _ :hammer(coeff,omega0Sqr,sigma0,kH,alpha,k,offset,fIn) : _ Where: coeff : output force scaling coefficient omega0Sqr : squared angular frequency of the hammer oscillator sigma0 : damping coefficient of the hammer oscillator kH : hammer stiffness coefficient alpha : nonlinearity parameter k : time sampling step (the same as for the mesh) offset : distance between the string and the hammer at rest in meters fIn : hammer excitation signal (i.e. a button) (fd.)bow Implementation of a nonlinear friction based interaction model that induces Helmholtz motion. (see Stefan Bilbao's book, Numerical Sound Synthesis). Usage _ :bow(coeff,alpha,k,vb) : _ Where: coeff : output force scaling coefficient alpha : nonlinearity parameter k : time sampling step (the same as for the mesh) vb : bow velocity [m/s]","title":" fds "},{"location":"libs/fds/#fdslib","text":"This library allows to build linear, explicit finite difference schemes physical models in 1 or 2 dimensions using an approach based on the cellular automata formalism. Its official prefix is fd . In order to use the library, one needs to discretize the linear partial differential equation of the desired system both at boundaries and in-between them, thus obtaining a set of explicit recursion relations. Each one of these will provide, for each spatial point the scalar coefficients to be multiplied by the states of the current and past neighbour points. Coefficients need to be stacked in parallel in order to form a coefficients matrix for each point in the mesh. It is necessary to provide one matrix for coefficients matrices are defined, they need to be placed in parallel and ordered following the desired mesh structure (i.e., coefficients for the top left boundaries will come first, while bottom right boundaries will come last), to form a coefficients scheme , which can be used with the library functions.","title":"fds.lib"},{"location":"libs/fds/#sources","text":"Here are listed some works on finite difference schemes and cellular automata thet were the basis for the implementation of this library S. Bilbao, Numerical Sound Synthesis.Chichester, UK: John Wiley Sons, Ltd, 2009 P. Narbel, \"Qualitative and quantitative cellular automata from differential equations,\" Lecture Notes in Computer Science, vol. 4173, pp. 112\u2013121, 10 2006 X.-S. Yang and Y. Young, Cellular Automata, PDEs, and Pattern Formation. Chapman & Hall/CRC, 092005, ch. 18, pp. 271\u2013282.","title":"Sources"},{"location":"libs/fds/#model-construction","text":"Once the coefficients scheme is defined, the user can simply call one of these functions to obtain a fully working physical model. They expect to receive a force input signal for each mesh point and output the state of each point. Interpolation operators can be used to drive external forces to the desired points, and to get the signal only from a certain area of the mesh.","title":"Model Construction"},{"location":"libs/fds/#fdmodel1d","text":"This function can be used to obtain a physical model in 1 dimension. Takes a force input signal for each point and outputs the state of each point.","title":"(fd.)model1D"},{"location":"libs/fds/#usage","text":"si.bus(points) : model1D(points,R,T,scheme) : si.bus(points) Where: points : size of the mesh in points R : neighbourhood radius, indicates how many side points are needed (i.e. if R=1 the mesh depends on one point on the left and one on the right) T : time coefficient, indicates how much steps back in time are needed (i. e. if T=1 the maximum delay needed for a neighbour state is 1 sample) scheme : coefficients scheme","title":"Usage"},{"location":"libs/fds/#fdmodel2d","text":"This function can be used to obtain a physical model in 2 dimension. Takes a force input signal for each point and outputs the state of each point. IMPORTANT: 2D models with more than 30x20 points might crash the c++ compiler. 2D models need to be compiled with the command line compiler, the online one presents some issues.","title":"(fd.)model2D"},{"location":"libs/fds/#usage_1","text":"si.bus(pointsX*pointsY) : model2D(pointsX,pointsY,R,T,scheme) : si.bus(pointsX*pointsY) Where: pointsX : horizontal size of the mesh in points pointsY : vertical size of the mesh in points R : neighbourhood radius, indicates how many side points are needed (i.e. if R=1 the mesh depends on one point on the left and one on the right) T : time coefficient, indicates how much steps back in time are needed (i. e. if T=1 the maximum delay needed for a neighbour state is 1 sample) scheme : coefficients scheme","title":"Usage"},{"location":"libs/fds/#interpolation","text":"Interpolation functions can be used to drive the input signals to the correct mesh points, or to get the output signal from the desired points. All the interpolation functions allow to change the input/output points at run time. In general, all these functions get in input a number of connections, and output the same number of connections, where each signal is multiplied by zero except the ones specified by the arguments.","title":"Interpolation"},{"location":"libs/fds/#fdstairsinterp1d","text":"Stairs interpolator in 1 dimension. Takes a number of signals and outputs the same number of signals, where each one is multiplied by zero except the one specified by the argument. This can vary at run time (i.e. a slider), but must be an integer.","title":"(fd.)stairsInterp1D"},{"location":"libs/fds/#usage_2","text":"si.bus(points) : stairsInterp1D(points,point) : si.bus(points) Where: points : total number of points in the mesh point : number of the desired nonzero signal","title":"Usage"},{"location":"libs/fds/#fdstairsinterp2d","text":"Stairs interpolator in 2 dimensions. Similar to the 1-D version.","title":"(fd.)stairsInterp2D"},{"location":"libs/fds/#usage_3","text":"si.bus(pointsX*pointsY) : stairsInterp2D(pointsX,pointsY,pointX,pointY) : si.bus(pointsX*pointsY) Where: pointsX : total number of points in the X direction pointsY : total number of points in the Y direction pointX : horizontal index of the desired nonzero signal pointY : vertical index of the desired nonzero signal","title":"Usage"},{"location":"libs/fds/#fdlininterp1d","text":"Linear interpolator in 1 dimension. Takes a number of signals and outputs the same number of signals, where each one is multiplied by zero except two signals around a floating point index. This is essentially a Faust implementation of the $J(x_i)$ operator, not scaled by the spatial step. (see Stefan Bilbao's book, Numerical Sound Synthesis). The index can vary at run time.","title":"(fd.)linInterp1D"},{"location":"libs/fds/#usage_4","text":"si.bus(points) : linInterp1D(points,point) : si.bus(points) Where: points : total number of points in the mesh point : floating point index","title":"Usage"},{"location":"libs/fds/#fdlininterp2d","text":"Linear interpolator in 2 dimensions. Similar to the 1 D version.","title":"(fd.)linInterp2D"},{"location":"libs/fds/#usage_5","text":"si.bus(pointsX*pointsY) : linInterp2D(pointsX,pointsY,pointX,pointY) : si.bus(pointsX*pointsY) Where: pointsX : total number of points in the X direction pointsY : total number of points in the Y direction pointX : horizontal float index pointY : vertical float index","title":"Usage"},{"location":"libs/fds/#fdstairsinterp1dout","text":"Stairs interpolator in 1 dimension. Similar to stairsInterp1D, except it outputs only the desired signal.","title":"(fd.)stairsInterp1DOut"},{"location":"libs/fds/#usage_6","text":"si.bus(points) : stairsInterp1DOut(points,point) : _ Where: points : total number of points in the mesh point : number of the desired nonzero signal","title":"Usage"},{"location":"libs/fds/#fdstairsinterp2dout","text":"Stairs interpolator in 2 dimensions which outputs only one signal.","title":"(fd.)stairsInterp2DOut"},{"location":"libs/fds/#usage_7","text":"si.bus(pointsX*pointsY) : stairsInterp2DOut(pointsX,pointsY,pointX,pointY) : _ Where: pointsX : total number of points in the X direction pointsY : total number of points in the Y direction pointX : horizontal index of the desired nonzero signal pointY : vertical index of the desired nonzero signal","title":"Usage"},{"location":"libs/fds/#fdlininterp1dout","text":"Linear interpolator in 1 dimension. Similar to stairsInterp1D, except it sums each output signal and provides only one output value.","title":"(fd.)linInterp1DOut"},{"location":"libs/fds/#usage_8","text":"si.bus(points) : linInterp1DOut(points,point) : _ Where: points : total number of points in the mesh point : floating point index","title":"Usage"},{"location":"libs/fds/#fdstairsinterp2dout_1","text":"Linear interpolator in 2 dimensions which outputs only one signal.","title":"(fd.)stairsInterp2DOut"},{"location":"libs/fds/#usage_9","text":"si.bus(pointsX*pointsY) : linInterp2DOut(pointsX,pointsY,pointX,pointY) : _ Where: pointsX : total number of points in the X direction pointsY : total number of points in the Y direction pointX : horizontal float index pointY : vertical float index","title":"Usage"},{"location":"libs/fds/#routing","text":"The routing functions are used internally by the model building functions, but can also be taken separately. These functions route the forces, the coefficients scheme and the neighbours\u2019 signals into the correct scheme points and take as input, in this order: the coefficients block, the feedback signals and the forces. In output they provide, in order, for each scheme point: the force signal, the coefficient matrices and the neighbours\u2019 signals. These functions are based on the Faust route primitive.","title":"Routing"},{"location":"libs/fds/#fdroute1d","text":"Routing function for 1 dimensional schemes.","title":"(fd.)route1D"},{"location":"libs/fds/#usage_10","text":"si.bus((2*R+1)*(T+1)*points),si.bus(points*2) : route1D(points, R, T) : si.bus((1 + ((2*R+1)*(T+1)) + (2*R+1))*points) Where: points : total number of points in the mesh R : neighbourhood radius T : time coefficient","title":"Usage"},{"location":"libs/fds/#fdroute2d","text":"Routing function for 2 dimensional schemes.","title":"(fd.)route2D"},{"location":"libs/fds/#usage_11","text":"si.bus((2*R+1)^2*(T+1)*pointsX*pointsY),si.bus(pointsX*pointsY*2) : route2D(pointsX, pointsY, R, T) : si.bus((1 + ((2*R+1)^2*(T+1)) + (2*R+1)^2)*pointsX*pointsY) Where: pointsX : total number of points in the X direction pointsY : total number of points in the Y direction R : neighbourhood radius T : time coefficient","title":"Usage"},{"location":"libs/fds/#scheme-operations","text":"The scheme operation functions are used internally by the model building functions but can also be taken separately. The schemePoint function is where the update equation is actually calculated. The buildScheme functions are used to stack in parallel several schemePoint blocks, according to the choosed mesh size.","title":"Scheme Operations"},{"location":"libs/fds/#fdschemepoint","text":"This function calculates the next state for each mesh point, in order to form a scheme, several of these blocks need to be stacked in parallel. This function takes in input, in order, the force, the coefficient matrices and the neighbours\u2019 signals and outputs the next point state.","title":"(fd.)schemePoint"},{"location":"libs/fds/#usage_12","text":"_,si.bus((2*R+1)^D*(T+1)),si.bus((2*R+1)^D) : schemePoint(R,T,D) : _ Where: R : neighbourhood radius T : time coefficient D : scheme spatial dimensions (i.e. 1 if 1-D, 2 if 2-D)","title":"Usage"},{"location":"libs/fds/#fdbuildscheme1d","text":"This function is used to stack in parallel several schemePoint functions in 1 dimension, according to the number of points.","title":"(fd.)buildScheme1D"},{"location":"libs/fds/#usage_13","text":"si.bus((1 + ((2*R+1)*(T+1)) + (2*R+1))*points) : buildScheme1D(points,R,T) : si.bus(points) Where: points : total number of points in the mesh R : neighbourhood radius T : time coefficient","title":"Usage"},{"location":"libs/fds/#fdbuildscheme2d","text":"This function is used to stack in parallel several schemePoint functions in 2 dimensions, according to the number of points in the X and Y directions.","title":"(fd.)buildScheme2D"},{"location":"libs/fds/#usage_14","text":"si.bus((1 + ((2*R+1)^2*(T+1)) + (2*R+1)^2)*pointsX*pointsY) : buildScheme2D(pointsX,pointsY,R,T) : si.bus(pointsX*pointsY) Where: pointsX : total number of points in the X direction pointsY : total number of points in the Y direction R : neighbourhood radius T : time coefficient","title":"Usage"},{"location":"libs/fds/#interaction-models","text":"Here are defined two physically based interaction algorithms: a hammer and a bow. These functions need to be coupled to the mesh pde, in the point where the interaction happens: to do so, the mesh output signals can be fed back and driven into the force block using the interpolation operators. The latters can be also used to drive the single force output signal to the correct scheme points.","title":"Interaction Models"},{"location":"libs/fds/#fdhammer","text":"Implementation of a nonlinear collision model. The hammer is essentially a finite difference scheme of a linear damped oscillator, which is coupled with the mesh through the collision model (see Stefan Bilbao's book, Numerical Sound Synthesis).","title":"(fd.)hammer"},{"location":"libs/fds/#usage_15","text":"_ :hammer(coeff,omega0Sqr,sigma0,kH,alpha,k,offset,fIn) : _ Where: coeff : output force scaling coefficient omega0Sqr : squared angular frequency of the hammer oscillator sigma0 : damping coefficient of the hammer oscillator kH : hammer stiffness coefficient alpha : nonlinearity parameter k : time sampling step (the same as for the mesh) offset : distance between the string and the hammer at rest in meters fIn : hammer excitation signal (i.e. a button)","title":"Usage"},{"location":"libs/fds/#fdbow","text":"Implementation of a nonlinear friction based interaction model that induces Helmholtz motion. (see Stefan Bilbao's book, Numerical Sound Synthesis).","title":"(fd.)bow"},{"location":"libs/fds/#usage_16","text":"_ :bow(coeff,alpha,k,vb) : _ Where: coeff : output force scaling coefficient alpha : nonlinearity parameter k : time sampling step (the same as for the mesh) vb : bow velocity [m/s]","title":"Usage"},{"location":"libs/filters/","text":"filters.lib Faust Filters library. Its official prefix is fi . The Filters library is organized into 19 sections: Basic Filters Comb Filters Direct-Form Digital Filter Sections Direct-Form Second-Order Biquad Sections Ladder/Lattice Digital Filters Useful Special Cases Ladder/Lattice Allpass Filters Digital Filter Sections Specified as Analog Filter Sections Simple Resonator Filters Butterworth Lowpass/Highpass Filters Special Filter-Bank Delay-Equalizing Allpass Filters Elliptic (Cauer) Lowpass Filters Elliptic Highpass Filters Butterworth Bandpass/Bandstop Filters Elliptic Bandpass Filters Parametric Equalizers (Shelf, Peaking) Mth-Octave Filter-Banks Arbitrary-Crossover Filter-Banks and Spectrum Analyzers SVF filters Basic Filters (fi.)zero One zero filter. Difference equation: y(n) = x(n) - zx(n-1) . Usage _ : zero(z) : _ Where: z : location of zero along real axis in z-plane Reference https://ccrma.stanford.edu/~jos/filters/One_Zero.html (fi.)pole One pole filter. Could also be called a \"leaky integrator\". Difference equation: y(n) = x(n) + py(n-1) . Usage _ : pole(p) : _ Where: p : pole location = feedback coefficient Reference https://ccrma.stanford.edu/~jos/filters/One_Pole.html (fi.)integrator Same as pole(1) [implemented separately for block-diagram clarity]. (fi.)dcblockerat DC blocker with configurable break frequency. The amplitude response is substantially flat above fb , and sloped at about +6 dB/octave below fb . Derived from the analog transfer function H(s) = \\frac{s}{(s + 2 \\pi fb)} (which can be seen as a 1st-order Butterworth highpass filter) by the low-frequency-matching bilinear transform method (i.e., the standard frequency-scaling constant 2*SR). Usage _ : dcblockerat(fb) : _ Where: fb : \"break frequency\" in Hz, i.e., -3 dB gain frequency. Reference https://ccrma.stanford.edu/~jos/pasp/Bilinear_Transformation.html (fi.)dcblocker DC blocker. Default dc blocker has -3dB point near 35 Hz (at 44.1 kHz) and high-frequency gain near 1.0025 (due to no scaling). dcblocker is as standard Faust function. Usage _ : dcblocker : _ (fi.)lptN One-pole lowpass filter with arbitrary dis/charging factors set in dB and times set in seconds. Usage _ : lptN(N, tN) : _ Where: N : is the attenuation factor in dB tN : is the filter period in seconds, that is, the time for the impulse response to decay by N dB Reference https://ccrma.stanford.edu/~jos/mdft/Exponentials.html Special cases of lptN Comb Filters (fi.)ff_comb Feed-Forward Comb Filter. Note that ff_comb requires integer delays (uses delay internally). ff_comb is a standard Faust function. Usage _ : ff_comb(maxdel,intdel,b0,bM) : _ Where: maxdel : maximum delay (a power of 2) intdel : current (integer) comb-filter delay between 0 and maxdel del : current (float) comb-filter delay between 0 and maxdel b0 : gain applied to delay-line input bM : gain applied to delay-line output and then summed with input Reference https://ccrma.stanford.edu/~jos/pasp/Feedforward_Comb_Filters.html (fi.)ff_fcomb Feed-Forward Comb Filter. Note that ff_fcomb takes floating-point delays (uses fdelay internally). ff_fcomb is a standard Faust function. Usage _ : ff_fcomb(maxdel,del,b0,bM) : _ Where: maxdel : maximum delay (a power of 2) intdel : current (integer) comb-filter delay between 0 and maxdel del : current (float) comb-filter delay between 0 and maxdel b0 : gain applied to delay-line input bM : gain applied to delay-line output and then summed with input Reference https://ccrma.stanford.edu/~jos/pasp/Feedforward_Comb_Filters.html (fi.)ffcombfilter Typical special case of ff_comb() where: b0 = 1 . (fi.)fb_comb Feed-Back Comb Filter (integer delay). Usage _ : fb_comb(maxdel,intdel,b0,aN) : _ Where: maxdel : maximum delay (a power of 2) intdel : current (integer) comb-filter delay between 0 and maxdel del : current (float) comb-filter delay between 0 and maxdel b0 : gain applied to delay-line input and forwarded to output aN : minus the gain applied to delay-line output before summing with the input and feeding to the delay line Reference https://ccrma.stanford.edu/~jos/pasp/Feedback_Comb_Filters.html (fi.)fb_fcomb Feed-Back Comb Filter (floating point delay). Usage _ : fb_fcomb(maxdel,del,b0,aN) : _ Where: maxdel : maximum delay (a power of 2) intdel : current (integer) comb-filter delay between 0 and maxdel del : current (float) comb-filter delay between 0 and maxdel b0 : gain applied to delay-line input and forwarded to output aN : minus the gain applied to delay-line output before summing with the input and feeding to the delay line Reference https://ccrma.stanford.edu/~jos/pasp/Feedback_Comb_Filters.html (fi.)rev1 Special case of fb_comb ( rev1(maxdel,N,g) ). The \"rev1 section\" dates back to the 1960s in computer-music reverberation. See the jcrev and brassrev in reverbs.lib for usage examples. (fi.)fbcombfilter and (fi.)ffbcombfilter Other special cases of Feed-Back Comb Filter. Usage _ : fbcombfilter(maxdel,intdel,g) : _ _ : ffbcombfilter(maxdel,del,g) : _ Where: maxdel : maximum delay (a power of 2) intdel : current (integer) comb-filter delay between 0 and maxdel del : current (float) comb-filter delay between 0 and maxdel g : feedback gain Reference https://ccrma.stanford.edu/~jos/pasp/Feedback_Comb_Filters.html (fi.)allpass_comb Schroeder Allpass Comb Filter. Note that: allpass_comb(maxlen,len,aN) = ff_comb(maxlen,len,aN,1) : fb_comb(maxlen,len-1,1,aN); which is a direct-form-1 implementation, requiring two delay lines. The implementation here is direct-form-2 requiring only one delay line. Usage _ : allpass_comb(maxdel,intdel,aN) : _ Where: maxdel : maximum delay (a power of 2) intdel : current (integer) comb-filter delay between 0 and maxdel del : current (float) comb-filter delay between 0 and maxdel aN : minus the feedback gain References https://ccrma.stanford.edu/~jos/pasp/Allpass_Two_Combs.html https://ccrma.stanford.edu/~jos/pasp/Schroeder_Allpass_Sections.html https://ccrma.stanford.edu/~jos/filters/Four_Direct_Forms.html (fi.)allpass_fcomb Schroeder Allpass Comb Filter. Note that: allpass_comb(maxlen,len,aN) = ff_comb(maxlen,len,aN,1) : fb_comb(maxlen,len-1,1,aN); which is a direct-form-1 implementation, requiring two delay lines. The implementation here is direct-form-2 requiring only one delay line. allpass_fcomb is a standard Faust library. Usage _ : allpass_comb(maxdel,intdel,aN) : _ _ : allpass_fcomb(maxdel,del,aN) : _ Where: maxdel : maximum delay (a power of 2) intdel : current (float) comb-filter delay between 0 and maxdel del : current (float) comb-filter delay between 0 and maxdel aN : minus the feedback gain References https://ccrma.stanford.edu/~jos/pasp/Allpass_Two_Combs.html https://ccrma.stanford.edu/~jos/pasp/Schroeder_Allpass_Sections.html https://ccrma.stanford.edu/~jos/filters/Four_Direct_Forms.html (fi.)rev2 Special case of allpass_comb ( rev2(maxlen,len,g) ). The \"rev2 section\" dates back to the 1960s in computer-music reverberation. See the jcrev and brassrev in reverbs.lib for usage examples. (fi.)allpass_fcomb5 and (fi.)allpass_fcomb1a Same as allpass_fcomb but use fdelay5 and fdelay1a internally (Interpolation helps - look at an fft of faust2octave on `1-1' <: allpass_fcomb(1024,10.5,0.95), allpass_fcomb5(1024,10.5,0.95);`). Direct-Form Digital Filter Sections (fi.)iir Nth-order Infinite-Impulse-Response (IIR) digital filter, implemented in terms of the Transfer-Function (TF) coefficients. Such filter structures are termed \"direct form\". iir is a standard Faust function. Usage _ : iir(bcoeffs,acoeffs) : _ Where: bcoeffs : (b0,b1,...,b_order) = TF numerator coefficients acoeffs : (a1,...,a_order) = TF denominator coeffs (a0=1) Reference https://ccrma.stanford.edu/~jos/filters/Four_Direct_Forms.html (fi.)fir FIR filter (convolution of FIR filter coefficients with a signal). Usage _ : fir(bv) : _ fir is standard Faust function. Where: bv = b0,b1,...,bn is a parallel bank of coefficient signals. Note bv is processed using pattern-matching at compile time, so it must have this normal form (parallel signals). Example Smoothing white noise with a five-point moving average: bv = .2,.2,.2,.2,.2; process = noise : fir(bv); Equivalent (note double parens): process = noise : fir((.2,.2,.2,.2,.2)); (fi.)conv and (fi.)convN Convolution of input signal with given coefficients. Usage _ : conv((k1,k2,k3,...,kN)) : _; // Argument = one signal bank _ : convN(N,(k1,k2,k3,...)) : _; // Useful when N < count((k1,...)) (fi.)tf1 , (fi.)tf2 and (fi.)tf3 tfN = N'th-order direct-form digital filter. Usage _ : tf1(b0,b1,a1) : _ _ : tf2(b0,b1,b2,a1,a2) : _ _ : tf3(b0,b1,b2,b3,a1,a2,a3) : _ Where: a : the poles b : the zeros Reference https://ccrma.stanford.edu/~jos/fp/Direct_Form_I.html (fi.)notchw Simple notch filter based on a biquad ( tf2 ). notchw is a standard Faust function. Usage: _ : notchw(width,freq) : _ Where: width : \"notch width\" in Hz (approximate) freq : \"notch frequency\" in Hz Reference https://ccrma.stanford.edu/~jos/pasp/Phasing_2nd_Order_Allpass_Filters.html Direct-Form Second-Order Biquad Sections Direct-Form Second-Order Biquad Sections Reference https://ccrma.stanford.edu/~jos/filters/Four_Direct_Forms.html (fi.)tf21 , (fi.)tf22 , (fi.)tf22t and (fi.)tf21t tfN = N'th-order direct-form digital filter where: tf21 is tf2, direct-form 1 tf22 is tf2, direct-form 2 tf22t is tf2, direct-form 2 transposed tf21t is tf2, direct-form 1 transposed Usage _ : tf21(b0,b1,b2,a1,a2) : _ _ : tf22(b0,b1,b2,a1,a2) : _ _ : tf22t(b0,b1,b2,a1,a2) : _ _ : tf21t(b0,b1,b2,a1,a2) : _ Where: a : the poles b : the zeros Reference https://ccrma.stanford.edu/~jos/fp/Direct_Form_I.html Ladder/Lattice Digital Filters Ladder and lattice digital filters generally have superior numerical properties relative to direct-form digital filters. They can be derived from digital waveguide filters, which gives them a physical interpretation. Reference F. Itakura and S. Saito: \"Digital Filtering Techniques for Speech Analysis and Synthesis\", 7th Int. Cong. Acoustics, Budapest, 25 C 1, 1971. J. D. Markel and A. H. Gray: Linear Prediction of Speech, New York: Springer Verlag, 1976. https://ccrma.stanford.edu/~jos/pasp/Conventional_Ladder_Filters.html (fi.)av2sv Compute reflection coefficients sv from transfer-function denominator av. Usage sv = av2sv(av) Where: av : parallel signal bank a1,...,aN sv : parallel signal bank s1,...,sN where ro = ith reflection coefficient, and ai = coefficient of z^(-i) in the filter transfer-function denominator A(z) . Reference https://ccrma.stanford.edu/~jos/filters/Step_Down_Procedure.html (where reflection coefficients are denoted by k rather than s). (fi.)bvav2nuv Compute lattice tap coefficients from transfer-function coefficients. Usage nuv = bvav2nuv(bv,av) Where: av : parallel signal bank a1,...,aN bv : parallel signal bank b0,b1,...,aN nuv : parallel signal bank nu1,...,nuN where nui is the i'th tap coefficient, bi is the coefficient of z^(-i) in the filter numerator, ai is the coefficient of z^(-i) in the filter denominator (fi.)iir_lat2 Two-multiply latice IIR filter of arbitrary order. Usage _ : iir_lat2(bv,av) : _ Where: bv: zeros as a bank of parallel signals av: poles as a bank of parallel signals (fi.)allpassnt Two-multiply lattice allpass (nested order-1 direct-form-ii allpasses). Usage _ : allpassnt(n,sv) : _ Where: n : the order of the filter sv : the reflection coefficients (-1 1) (fi.)iir_kl Kelly-Lochbaum ladder IIR filter of arbitrary order. Usage _ : iir_kl(bv,av) : _ Where: bv: zeros as a bank of parallel signals av: poles as a bank of parallel signals (fi.)allpassnklt Kelly-Lochbaum ladder allpass. Usage: _ : allpassklt(n,sv) : _ Where: n : the order of the filter sv : the reflection coefficients (-1 1) (fi.)iir_lat1 One-multiply latice IIR filter of arbitrary order. Usage _ : iir_lat1(bv,av) : _ Where: bv: zeros as a bank of parallel signals av: poles as a bank of parallel signals (fi.)allpassn1mt One-multiply lattice allpass with tap lines. Usage _ : allpassn1mt(N,sv) : _ Where: N : the order of the filter (fixed at compile time) sv : the reflection coefficients (-1 1) (fi.)iir_nl Normalized ladder filter of arbitrary order. Usage _ : iir_nl(bv,av) : _ Where: bv: zeros as a bank of parallel signals av: poles as a bank of parallel signals References J. D. Markel and A. H. Gray, Linear Prediction of Speech, New York: Springer Verlag, 1976. https://ccrma.stanford.edu/~jos/pasp/Normalized_Scattering_Junctions.html (fi.)allpassnnlt Normalized ladder allpass filter of arbitrary order. Usage: _ : allpassnnlt(N,sv) : _ Where: N : the order of the filter (fixed at compile time) sv : the reflection coefficients (-1,1) References J. D. Markel and A. H. Gray, Linear Prediction of Speech, New York: Springer Verlag, 1976. https://ccrma.stanford.edu/~jos/pasp/Normalized_Scattering_Junctions.html Useful Special Cases (fi.)tf2np Biquad based on a stable second-order Normalized Ladder Filter (more robust to modulation than tf2 and protected against instability). Usage _ : tf2np(b0,b1,b2,a1,a2) : _ Where: a : the poles b : the zeros (fi.)wgr Second-order transformer-normalized digital waveguide resonator. Usage _ : wgr(f,r) : _ Where: f : resonance frequency (Hz) r : loss factor for exponential decay (set to 1 to make a numerically stable oscillator) References https://ccrma.stanford.edu/~jos/pasp/Power_Normalized_Waveguide_Filters.html https://ccrma.stanford.edu/~jos/pasp/Digital_Waveguide_Oscillator.html (fi.)nlf2 Second order normalized digital waveguide resonator. Usage _ : nlf2(f,r) : _ Where: f : resonance frequency (Hz) r : loss factor for exponential decay (set to 1 to make a sinusoidal oscillator) Reference https://ccrma.stanford.edu/~jos/pasp/Power_Normalized_Waveguide_Filters.html (fi.)apnl Passive Nonlinear Allpass based on Pierce switching springs idea. Switch between allpass coefficient a1 and a2 at signal zero crossings. Usage _ : apnl(a1,a2) : _ Where: a1 and a2 : allpass coefficients Reference \"A Passive Nonlinear Digital Filter Design ...\" by John R. Pierce and Scott A. Van Duyne, JASA, vol. 101, no. 2, pp. 1120-1126, 1997 Ladder/Lattice Allpass Filters An allpass filter has gain 1 at every frequency, but variable phase. Ladder/lattice allpass filters are specified by reflection coefficients. They are defined here as nested allpass filters, hence the names allpassn*. References https://ccrma.stanford.edu/~jos/pasp/Conventional_Ladder_Filters.html https://ccrma.stanford.edu/~jos/pasp/Nested_Allpass_Filters.html Linear Prediction of Speech, Markel and Gray, Springer Verlag, 1976 (fi.)allpassn Two-multiply lattice - each section is two multiply-adds. Usage: _ : allpassn(n,sv) : _ Where: n : the order of the filter sv : the reflection coefficients (-1 1) References J. O. Smith and R. Michon, \"Nonlinear Allpass Ladder Filters in FAUST\", in Proceedings of the 14th International Conference on Digital Audio Effects (DAFx-11), Paris, France, September 19-23, 2011. (fi.)allpassnn Normalized form - four multiplies and two adds per section, but coefficients can be time varying and nonlinear without \"parametric amplification\" (modulation of signal energy). Usage: _ : allpassnn(n,tv) : _ Where: n : the order of the filter tv : the reflection coefficients (-PI PI) (fi.)allpasskl Kelly-Lochbaum form - four multiplies and two adds per section, but all signals have an immediate physical interpretation as traveling pressure waves, etc. Usage: _ : allpassnkl(n,sv) : _ Where: n : the order of the filter sv : the reflection coefficients (-1 1) (fi.)allpass1m One-multiply form - one multiply and three adds per section. Normally the most efficient in special-purpose hardware. Usage: _ : allpassn1m(n,sv) : _ Where: n : the order of the filter sv : the reflection coefficients (-1 1) Digital Filter Sections Specified as Analog Filter Sections (fi.)tf2s and (fi.)tf2snp Second-order direct-form digital filter, specified by ANALOG transfer-function polynomials B(s)/A(s), and a frequency-scaling parameter. Digitization via the bilinear transform is built in. Usage _ : tf2s(b2,b1,b0,a1,a0,w1) : _ Where: b2 s^2 + b1 s + b0 H(s) = -------------------- s^2 + a1 s + a0 and w1 is the desired digital frequency (in radians/second) corresponding to analog frequency 1 rad/sec (i.e., s = j ). Example A second-order ANALOG Butterworth lowpass filter, normalized to have cutoff frequency at 1 rad/sec, has transfer function: 1 H(s) = ----------------- s^2 + a1 s + 1 where a1 = sqrt(2) . Therefore, a DIGITAL Butterworth lowpass cutting off at SR/4 is specified as tf2s(0,0,1,sqrt(2),1,PI*SR/2); Method Bilinear transform scaled for exact mapping of w1. Reference https://ccrma.stanford.edu/~jos/pasp/Bilinear_Transformation.html (fi.)tf3slf Analogous to tf2s above, but third order, and using the typical low-frequency-matching bilinear-transform constant 2/T (\"lf\" series) instead of the specific-frequency-matching value used in tf2s and tf1s. Note the lack of a \"w1\" argument. Usage _ : tf3slf(b3,b2,b1,b0,a3,a2,a1,a0) : _ (fi.)tf1s First-order direct-form digital filter, specified by ANALOG transfer-function polynomials B(s)/A(s), and a frequency-scaling parameter. Usage tf1s(b1,b0,a0,w1) Where: b1 s + b0 H(s) = ---------- s + a0 and w1 is the desired digital frequency (in radians/second) corresponding to analog frequency 1 rad/sec (i.e., s = j ). Example A first-order ANALOG Butterworth lowpass filter, normalized to have cutoff frequency at 1 rad/sec, has transfer function: 1 H(s) = ------- s + 1 so b0 = a0 = 1 and b1 = 0 . Therefore, a DIGITAL first-order Butterworth lowpass with gain -3dB at SR/4 is specified as tf1s(0,1,1,PI*SR/2); // digital half-band order 1 Butterworth Method Bilinear transform scaled for exact mapping of w1. Reference https://ccrma.stanford.edu/~jos/pasp/Bilinear_Transformation.html (fi.)tf2sb Bandpass mapping of tf2s : In addition to a frequency-scaling parameter w1 (set to HALF the desired passband width in rad/sec), there is a desired center-frequency parameter wc (also in rad/s). Thus, tf2sb implements a fourth-order digital bandpass filter section specified by the coefficients of a second-order analog lowpass prototype section. Such sections can be combined in series for higher orders. The order of mappings is (1) frequency scaling (to set lowpass cutoff w1), (2) bandpass mapping to wc, then (3) the bilinear transform, with the usual scale parameter 2*SR . Algebra carried out in maxima and pasted here. Usage _ : tf2sb(b2,b1,b0,a1,a0,w1,wc) : _ (fi.)tf1sb First-to-second-order lowpass-to-bandpass section mapping, analogous to tf2sb above. Usage _ : tf1sb(b1,b0,a0,w1,wc) : _ Simple Resonator Filters (fi.)resonlp Simple resonant lowpass filter based on tf2s (virtual analog). resonlp is a standard Faust function. Usage _ : resonlp(fc,Q,gain) : _ _ : resonhp(fc,Q,gain) : _ _ : resonbp(fc,Q,gain) : _ Where: fc : center frequency (Hz) Q : q gain : gain (0-1) (fi.)resonhp Simple resonant highpass filters based on tf2s (virtual analog). resonhp is a standard Faust function. Usage _ : resonlp(fc,Q,gain) : _ _ : resonhp(fc,Q,gain) : _ _ : resonbp(fc,Q,gain) : _ Where: fc : center frequency (Hz) Q : q gain : gain (0-1) (fi.)resonbp Simple resonant bandpass filters based on tf2s (virtual analog). resonbp is a standard Faust function. Usage _ : resonlp(fc,Q,gain) : _ _ : resonhp(fc,Q,gain) : _ _ : resonbp(fc,Q,gain) : _ Where: fc : center frequency (Hz) Q : q gain : gain (0-1) Butterworth Lowpass/Highpass Filters (fi.)lowpass Nth-order Butterworth lowpass filter. lowpass is a standard Faust function. Usage _ : lowpass(N,fc) : _ Where: N : filter order (number of poles) [nonnegative constant integer] fc : desired cut-off frequency (-3dB frequency) in Hz References https://ccrma.stanford.edu/~jos/filters/Butterworth_Lowpass_Design.html butter function in Octave (\"[z,p,g] = butter(N,1,'s');\") (fi.)highpass Nth-order Butterworth highpass filters. highpass is a standard Faust function. Usage _ : highpass(N,fc) : _ Where: N : filter order (number of poles) [nonnegative constant integer] fc : desired cut-off frequency (-3dB frequency) in Hz References https://ccrma.stanford.edu/~jos/filters/Butterworth_Lowpass_Design.html butter function in Octave (\"[z,p,g] = butter(N,1,'s');\") (fi.)lowpass0_highpass1 Special Filter-Bank Delay-Equalizing Allpass Filters These special allpass filters are needed by filterbank et al. below. They are equivalent to ( lowpass(N,fc) +|- highpass(N,fc))/2 , but with canceling pole-zero pairs removed (which occurs for odd N). (fi.)lowpass_plus | minus_highpass Catch-all definitions for generality - even order is done: Catch-all definitions for generality - even order is done: FIXME: Rewrite the following, as for orders 3 and 5 above, to eliminate pole-zero cancellations: FIXME: Rewrite the following, as for orders 3 and 5 above, to eliminate pole-zero cancellations: Elliptic (Cauer) Lowpass Filters Elliptic (Cauer) Lowpass Filters References http://en.wikipedia.org/wiki/Elliptic_filter functions ncauer and ellip in Octave. (fi.)lowpass3e Third-order Elliptic (Cauer) lowpass filter. Usage _ : lowpass3e(fc) : _ Where: fc : -3dB frequency in Hz Design For spectral band-slice level display (see octave_analyzer3e ): [z,p,g] = ncauer(Rp,Rs,3); % analog zeros, poles, and gain, where Rp = 60 % dB ripple in stopband Rs = 0.2 % dB ripple in passband (fi.)lowpass6e Sixth-order Elliptic/Cauer lowpass filter. Usage _ : lowpass6e(fc) : _ Where: fc : -3dB frequency in Hz Design For spectral band-slice level display (see octave_analyzer6e): [z,p,g] = ncauer(Rp,Rs,6); % analog zeros, poles, and gain, where Rp = 80 % dB ripple in stopband Rs = 0.2 % dB ripple in passband Elliptic Highpass Filters (fi.)highpass3e Third-order Elliptic (Cauer) highpass filter. Inversion of lowpass3e wrt unit circle in s plane (s <- 1/s) Usage _ : highpass3e(fc) : _ Where: fc : -3dB frequency in Hz (fi.)highpass6e Sixth-order Elliptic/Cauer highpass filter. Inversion of lowpass3e wrt unit circle in s plane (s <- 1/s) Usage _ : highpass6e(fc) : _ Where: fc : -3dB frequency in Hz Butterworth Bandpass/Bandstop Filters (fi.)bandpass Order 2*Nh Butterworth bandpass filter made using the transformation s <- s + wc^2/s on lowpass(Nh) , where wc is the desired bandpass center frequency. The lowpass(Nh) cutoff w1 is half the desired bandpass width. bandpass is a standard Faust function. Usage _ : bandpass(Nh,fl,fu) : _ Where: Nh : HALF the desired bandpass order (which is therefore even) fl : lower -3dB frequency in Hz fu : upper -3dB frequency in Hz Thus, the passband width is fu-fl , and its center frequency is (fl+fu)/2 . Reference http://cnx.org/content/m16913/latest/ (fi.)bandstop Order 2*Nh Butterworth bandstop filter made using the transformation s <- s + wc^2/s on highpass(Nh) , where wc is the desired bandpass center frequency. The highpass(Nh) cutoff w1 is half the desired bandpass width. bandstop is a standard Faust function. Usage _ : bandstop(Nh,fl,fu) : _ Where: Nh : HALF the desired bandstop order (which is therefore even) fl : lower -3dB frequency in Hz fu : upper -3dB frequency in Hz Thus, the passband (stopband) width is fu-fl , and its center frequency is (fl+fu)/2 . Reference http://cnx.org/content/m16913/latest/ Elliptic Bandpass Filters (fi.)bandpass6e Order 12 elliptic bandpass filter analogous to bandpass(6) . (fi.)bandpass12e Order 24 elliptic bandpass filter analogous to bandpass(6) . (fi.)pospass Positive-Pass Filter (single-side-band filter) Usage _ : pospass(N,fc) : _,_ where N : filter order (Butterworth bandpass for positive frequencies). fc : lower bandpass cutoff frequency in Hz. Highpass cutoff frequency at ma.SR/2 - fc Hz. Example See dm.pospass_demo Look at frequency response: Method A filter passing only positive frequencies can be made from a half-band lowpass by modulating it up to the positive-frequency range. Equivalently, down-modulate the input signal using a complex sinusoid at -SR/4 Hz, lowpass it with a half-band filter, and modulate back up by SR/4 Hz. In Faust/math notation: pospass(N) = \\ast(e^{-j\\frac{\\pi}{2}n}) : \\mbox{lowpass(N,SR/4)} : \\ast(e^{j\\frac{\\pi}{2}n}) An approximation to the Hilbert transform is given by the imaginary output signal: hilbert(N) = pospass(N) : !,*(2); References https://ccrma.stanford.edu/~jos/mdft/Analytic_Signals_Hilbert_Transform.html https://ccrma.stanford.edu/~jos/sasp/Comparison_Optimal_Chebyshev_FIR_I.html https://ccrma.stanford.edu/~jos/sasp/Hilbert_Transform.html Parametric Equalizers (Shelf, Peaking) Parametric Equalizers (Shelf, Peaking). References http://en.wikipedia.org/wiki/Equalization https://webaudio.github.io/Audio-EQ-Cookbook/Audio-EQ-Cookbook.txt Digital Audio Signal Processing, Udo Zolzer, Wiley, 1999, p. 124 https://ccrma.stanford.edu/~jos/filters/Low_High_Shelving_Filters.html https://ccrma.stanford.edu/~jos/filters/Peaking_Equalizers.html maxmsp.lib in the Faust distribution bandfilter.dsp in the faust2pd distribution (fi.)low_shelf First-order \"low shelf\" filter (gain boost|cut between dc and some frequency) low_shelf is a standard Faust function. Usage _ : lowshelf(N,L0,fx) : _ _ : low_shelf(L0,fx) : _ // default case (order 3) _ : lowshelf_other_freq(N,L0,fx) : _ Where: * N : filter order 1, 3, 5, ... (odd only). (default should be 3) * L0 : desired level (dB) between dc and fx (boost L0>0 or cut L0<0 ) * fx : -3dB frequency of lowpass band ( L0>0 ) or upper band ( L0<0 ) (see \"SHELF SHAPE\" below). The gain at SR/2 is constrained to be 1. The generalization to arbitrary odd orders is based on the well known fact that odd-order Butterworth band-splits are allpass-complementary (see filterbank documentation below for references). Shelf Shape The magnitude frequency response is approximately piecewise-linear on a log-log plot (\"BODE PLOT\"). The Bode \"stick diagram\" approximation L(lf) is easy to state in dB versus dB-frequency lf = dB(f): L0 > 0: L(lf) = L0, f between 0 and fx = 1st corner frequency; L(lf) = L0 - N * (lf - lfx), f between fx and f2 = 2nd corner frequency; L(lf) = 0, lf > lf2. lf2 = lfx + L0/N = dB-frequency at which level gets back to 0 dB. L0 < 0: L(lf) = L0, f between 0 and f1 = 1st corner frequency; L(lf) = - N * (lfx - lf), f between f1 and lfx = 2nd corner frequency; L(lf) = 0, lf > lfx. lf1 = lfx + L0/N = dB-frequency at which level goes up from L0. See lowshelf_other_freq . (fi.)high_shelf First-order \"high shelf\" filter (gain boost|cut above some frequency). high_shelf is a standard Faust function. Usage _ : highshelf(N,Lpi,fx) : _ _ : high_shelf(L0,fx) : _ // default case (order 3) _ : highshelf_other_freq(N,Lpi,fx) : _ Where: N : filter order 1, 3, 5, ... (odd only). Lpi : desired level (dB) between fx and SR/2 (boost Lpi>0 or cut Lpi<0) fx : -3dB frequency of highpass band (L0>0) or lower band (L0<0) (Use highshelf_other_freq() below to find the other one.) The gain at dc is constrained to be 1. See lowshelf documentation above for more details on shelf shape. (fi.)peak_eq Second order \"peaking equalizer\" section (gain boost or cut near some frequency) Also called a \"parametric equalizer\" section. peak_eq is a standard Faust function. Usage _ : peak_eq(Lfx,fx,B) : _; Where: Lfx : level (dB) at fx (boost Lfx>0 or cut Lfx<0) fx : peak frequency (Hz) B : bandwidth (B) of peak in Hz (fi.)peak_eq_cq Constant-Q second order peaking equalizer section. Usage _ : peak_eq_cq(Lfx,fx,Q) : _; Where: Lfx : level (dB) at fx fx : boost or cut frequency (Hz) Q : \"Quality factor\" = fx/B where B = bandwidth of peak in Hz (fi.)peak_eq_rm Regalia-Mitra second order peaking equalizer section. Usage _ : peak_eq_rm(Lfx,fx,tanPiBT) : _; Where: Lfx : level (dB) at fx fx : boost or cut frequency (Hz) tanPiBT : tan(PI*B/SR) , where B = -3dB bandwidth (Hz) when 10^(Lfx/20) = 0 ~ PI*B/SR for narrow bandwidths B Reference P.A. Regalia, S.K. Mitra, and P.P. Vaidyanathan, \"The Digital All-Pass Filter: A Versatile Signal Processing Building Block\" Proceedings of the IEEE, 76(1):19-37, Jan. 1988. (See pp. 29-30.) (fi.)spectral_tilt Spectral tilt filter, providing an arbitrary spectral rolloff factor alpha in (-1,1), where -1 corresponds to one pole (-6 dB per octave), and +1 corresponds to one zero (+6 dB per octave). In other words, alpha is the slope of the ln magnitude versus ln frequency. For a \"pinking filter\" (e.g., to generate 1/f noise from white noise), set alpha to -1/2. Usage _ : spectral_tilt(N,f0,bw,alpha) : _ Where: N : desired integer filter order (fixed at compile time) f0 : lower frequency limit for desired roll-off band > 0 bw : bandwidth of desired roll-off band alpha : slope of roll-off desired in nepers per neper, between -1 and 1 (ln mag / ln radian freq) Examples See spectral_tilt_demo . Reference J.O. Smith and H.F. Smith, \"Closed Form Fractional Integration and Differentiation via Real Exponentially Spaced Pole-Zero Pairs\", arXiv.org publication arXiv:1606.06154 [cs.CE], June 7, 2016, * http://arxiv.org/abs/1606.06154 (fi.)levelfilter Dynamic level lowpass filter. levelfilter is a standard Faust function. Usage _ : levelfilter(L,freq) : _ Where: L : desired level (in dB) at Nyquist limit (SR/2), e.g., -60 freq : corner frequency (-3dB point) usually set to fundamental freq N : Number of filters in series where L = L/N Reference https://ccrma.stanford.edu/realsimple/faust_strings/Dynamic_Level_Lowpass_Filter.html (fi.)levelfilterN Dynamic level lowpass filter. Usage _ : levelfilterN(N,freq,L) : _ Where: L : desired level (in dB) at Nyquist limit (SR/2), e.g., -60 freq : corner frequency (-3dB point) usually set to fundamental freq N : Number of filters in series where L = L/N Reference https://ccrma.stanford.edu/realsimple/faust_strings/Dynamic_Level_Lowpass_Filter.html Mth-Octave Filter-Banks Mth-octave filter-banks split the input signal into a bank of parallel signals, one for each spectral band. They are related to the Mth-Octave Spectrum-Analyzers in analysis.lib . The documentation of this library contains more details about the implementation. The parameters are: M : number of band-slices per octave (>1) N : total number of bands (>2) ftop : upper bandlimit of the Mth-octave bands (0 or cut L0<0 ) * fx : -3dB frequency of lowpass band ( L0>0 ) or upper band ( L0<0 ) (see \"SHELF SHAPE\" below). The gain at SR/2 is constrained to be 1. The generalization to arbitrary odd orders is based on the well known fact that odd-order Butterworth band-splits are allpass-complementary (see filterbank documentation below for references).","title":"Usage"},{"location":"libs/filters/#shelf-shape","text":"The magnitude frequency response is approximately piecewise-linear on a log-log plot (\"BODE PLOT\"). The Bode \"stick diagram\" approximation L(lf) is easy to state in dB versus dB-frequency lf = dB(f): L0 > 0: L(lf) = L0, f between 0 and fx = 1st corner frequency; L(lf) = L0 - N * (lf - lfx), f between fx and f2 = 2nd corner frequency; L(lf) = 0, lf > lf2. lf2 = lfx + L0/N = dB-frequency at which level gets back to 0 dB. L0 < 0: L(lf) = L0, f between 0 and f1 = 1st corner frequency; L(lf) = - N * (lfx - lf), f between f1 and lfx = 2nd corner frequency; L(lf) = 0, lf > lfx. lf1 = lfx + L0/N = dB-frequency at which level goes up from L0. See lowshelf_other_freq .","title":"Shelf Shape"},{"location":"libs/filters/#fihigh_shelf","text":"First-order \"high shelf\" filter (gain boost|cut above some frequency). high_shelf is a standard Faust function.","title":"(fi.)high_shelf"},{"location":"libs/filters/#usage_54","text":"_ : highshelf(N,Lpi,fx) : _ _ : high_shelf(L0,fx) : _ // default case (order 3) _ : highshelf_other_freq(N,Lpi,fx) : _ Where: N : filter order 1, 3, 5, ... (odd only). Lpi : desired level (dB) between fx and SR/2 (boost Lpi>0 or cut Lpi<0) fx : -3dB frequency of highpass band (L0>0) or lower band (L0<0) (Use highshelf_other_freq() below to find the other one.) The gain at dc is constrained to be 1. See lowshelf documentation above for more details on shelf shape.","title":"Usage"},{"location":"libs/filters/#fipeak_eq","text":"Second order \"peaking equalizer\" section (gain boost or cut near some frequency) Also called a \"parametric equalizer\" section. peak_eq is a standard Faust function.","title":"(fi.)peak_eq"},{"location":"libs/filters/#usage_55","text":"_ : peak_eq(Lfx,fx,B) : _; Where: Lfx : level (dB) at fx (boost Lfx>0 or cut Lfx<0) fx : peak frequency (Hz) B : bandwidth (B) of peak in Hz","title":"Usage"},{"location":"libs/filters/#fipeak_eq_cq","text":"Constant-Q second order peaking equalizer section.","title":"(fi.)peak_eq_cq"},{"location":"libs/filters/#usage_56","text":"_ : peak_eq_cq(Lfx,fx,Q) : _; Where: Lfx : level (dB) at fx fx : boost or cut frequency (Hz) Q : \"Quality factor\" = fx/B where B = bandwidth of peak in Hz","title":"Usage"},{"location":"libs/filters/#fipeak_eq_rm","text":"Regalia-Mitra second order peaking equalizer section.","title":"(fi.)peak_eq_rm"},{"location":"libs/filters/#usage_57","text":"_ : peak_eq_rm(Lfx,fx,tanPiBT) : _; Where: Lfx : level (dB) at fx fx : boost or cut frequency (Hz) tanPiBT : tan(PI*B/SR) , where B = -3dB bandwidth (Hz) when 10^(Lfx/20) = 0 ~ PI*B/SR for narrow bandwidths B","title":"Usage"},{"location":"libs/filters/#reference_22","text":"P.A. Regalia, S.K. Mitra, and P.P. Vaidyanathan, \"The Digital All-Pass Filter: A Versatile Signal Processing Building Block\" Proceedings of the IEEE, 76(1):19-37, Jan. 1988. (See pp. 29-30.)","title":"Reference"},{"location":"libs/filters/#fispectral_tilt","text":"Spectral tilt filter, providing an arbitrary spectral rolloff factor alpha in (-1,1), where -1 corresponds to one pole (-6 dB per octave), and +1 corresponds to one zero (+6 dB per octave). In other words, alpha is the slope of the ln magnitude versus ln frequency. For a \"pinking filter\" (e.g., to generate 1/f noise from white noise), set alpha to -1/2.","title":"(fi.)spectral_tilt"},{"location":"libs/filters/#usage_58","text":"_ : spectral_tilt(N,f0,bw,alpha) : _ Where: N : desired integer filter order (fixed at compile time) f0 : lower frequency limit for desired roll-off band > 0 bw : bandwidth of desired roll-off band alpha : slope of roll-off desired in nepers per neper, between -1 and 1 (ln mag / ln radian freq)","title":"Usage"},{"location":"libs/filters/#examples","text":"See spectral_tilt_demo .","title":"Examples"},{"location":"libs/filters/#reference_23","text":"J.O. Smith and H.F. Smith, \"Closed Form Fractional Integration and Differentiation via Real Exponentially Spaced Pole-Zero Pairs\", arXiv.org publication arXiv:1606.06154 [cs.CE], June 7, 2016, * http://arxiv.org/abs/1606.06154","title":"Reference"},{"location":"libs/filters/#filevelfilter","text":"Dynamic level lowpass filter. levelfilter is a standard Faust function.","title":"(fi.)levelfilter"},{"location":"libs/filters/#usage_59","text":"_ : levelfilter(L,freq) : _ Where: L : desired level (in dB) at Nyquist limit (SR/2), e.g., -60 freq : corner frequency (-3dB point) usually set to fundamental freq N : Number of filters in series where L = L/N","title":"Usage"},{"location":"libs/filters/#reference_24","text":"https://ccrma.stanford.edu/realsimple/faust_strings/Dynamic_Level_Lowpass_Filter.html","title":"Reference"},{"location":"libs/filters/#filevelfiltern","text":"Dynamic level lowpass filter.","title":"(fi.)levelfilterN"},{"location":"libs/filters/#usage_60","text":"_ : levelfilterN(N,freq,L) : _ Where: L : desired level (in dB) at Nyquist limit (SR/2), e.g., -60 freq : corner frequency (-3dB point) usually set to fundamental freq N : Number of filters in series where L = L/N","title":"Usage"},{"location":"libs/filters/#reference_25","text":"https://ccrma.stanford.edu/realsimple/faust_strings/Dynamic_Level_Lowpass_Filter.html","title":"Reference"},{"location":"libs/filters/#mth-octave-filter-banks","text":"Mth-octave filter-banks split the input signal into a bank of parallel signals, one for each spectral band. They are related to the Mth-Octave Spectrum-Analyzers in analysis.lib . The documentation of this library contains more details about the implementation. The parameters are: M : number of band-slices per octave (>1) N : total number of bands (>2) ftop : upper bandlimit of the Mth-octave bands (0. Usage _ : signum : _ (ma.)nextpow2 The nextpow2(x) returns the lowest integer m such that 2^m >= x. Usage 2^nextpow2(n) Useful for allocating delay lines, e.g., delay(2^nextpow2(maxDelayNeeded), currentDelay); (ma.)zc Indicator function for zero-crossing: it returns 1 if a zero-crossing occurs, 0 otherwise. Usage _ : zc : _","title":" maths "},{"location":"libs/maths/#mathslib","text":"Mathematic library for Faust. Its official prefix is ma .","title":"maths.lib"},{"location":"libs/maths/#functions-reference","text":"","title":"Functions Reference"},{"location":"libs/maths/#masr","text":"Current sampling rate. Constant during program execution.","title":"(ma.)SR"},{"location":"libs/maths/#usage","text":"SR : _","title":"Usage"},{"location":"libs/maths/#mabs","text":"Current block-size. Can change during the execution.","title":"(ma.)BS"},{"location":"libs/maths/#usage_1","text":"BS : _","title":"Usage"},{"location":"libs/maths/#mapi","text":"Constant PI in double precision.","title":"(ma.)PI"},{"location":"libs/maths/#usage_2","text":"PI : _","title":"Usage"},{"location":"libs/maths/#mae","text":"Constant e in double precision.","title":"(ma.)E"},{"location":"libs/maths/#usage_3","text":"E : _","title":"Usage"},{"location":"libs/maths/#maepsilon","text":"Constant EPSILON in simple/double/quad precision.","title":"(ma.)EPSILON"},{"location":"libs/maths/#usage_4","text":"EPSILON : _","title":"Usage"},{"location":"libs/maths/#mamin","text":"Constant MIN in simple/double/quad precision (minimal positive value).","title":"(ma.)MIN"},{"location":"libs/maths/#usage_5","text":"MIN : _","title":"Usage"},{"location":"libs/maths/#mainfinity","text":"Constant INFINITY in simple/double/quad precision (maximal positive value).","title":"(ma.)INFINITY"},{"location":"libs/maths/#usage_6","text":"INFINITY : _","title":"Usage"},{"location":"libs/maths/#maftz","text":"Flush to zero: force samples under the \"maximum subnormal number\" to be zero. Usually not needed in C++ because the architecture file take care of this, but can be useful in JavaScript for instance.","title":"(ma.)FTZ"},{"location":"libs/maths/#usage_7","text":"_ : FTZ : _","title":"Usage"},{"location":"libs/maths/#reference","text":"http://docs.oracle.com/cd/E19957-01/806-3568/ncg_math.html","title":"Reference"},{"location":"libs/maths/#maneg","text":"Invert the sign (-x) of a signal.","title":"(ma.)neg"},{"location":"libs/maths/#usage_8","text":"_ : neg : _","title":"Usage"},{"location":"libs/maths/#masubxy","text":"Subtract x and y .","title":"(ma.)sub(x,y)"},{"location":"libs/maths/#mainv","text":"Compute the inverse (1/x) of the input signal.","title":"(ma.)inv"},{"location":"libs/maths/#usage_9","text":"_ : inv : _","title":"Usage"},{"location":"libs/maths/#macbrt","text":"Computes the cube root of of the input signal.","title":"(ma.)cbrt"},{"location":"libs/maths/#usage_10","text":"_ : cbrt : _","title":"Usage"},{"location":"libs/maths/#mahypot","text":"Computes the euclidian distance of the two input signals sqrt(x x+y y) without undue overflow or underflow.","title":"(ma.)hypot"},{"location":"libs/maths/#usage_11","text":"_,_ : hypot : _","title":"Usage"},{"location":"libs/maths/#maldexp","text":"Takes two input signals: x and n, and multiplies x by 2 to the power n.","title":"(ma.)ldexp"},{"location":"libs/maths/#usage_12","text":"_,_ : ldexp : _","title":"Usage"},{"location":"libs/maths/#mascalb","text":"Takes two input signals: x and n, and multiplies x by 2 to the power n.","title":"(ma.)scalb"},{"location":"libs/maths/#usage_13","text":"_,_ : scalb : _","title":"Usage"},{"location":"libs/maths/#malog1p","text":"Computes log(1 + x) without undue loss of accuracy when x is nearly zero.","title":"(ma.)log1p"},{"location":"libs/maths/#usage_14","text":"_ : log1p : _","title":"Usage"},{"location":"libs/maths/#malogb","text":"Return exponent of the input signal as a floating-point number.","title":"(ma.)logb"},{"location":"libs/maths/#usage_15","text":"_ : logb : _","title":"Usage"},{"location":"libs/maths/#mailogb","text":"Return exponent of the input signal as an integer number.","title":"(ma.)ilogb"},{"location":"libs/maths/#usage_16","text":"_ : ilogb : _","title":"Usage"},{"location":"libs/maths/#malog2","text":"Returns the base 2 logarithm of x.","title":"(ma.)log2"},{"location":"libs/maths/#usage_17","text":"_ : log2 : _","title":"Usage"},{"location":"libs/maths/#maexpm1","text":"Return exponent of the input signal minus 1 with better precision.","title":"(ma.)expm1"},{"location":"libs/maths/#usage_18","text":"_ : expm1 : _","title":"Usage"},{"location":"libs/maths/#maacosh","text":"Computes the principle value of the inverse hyperbolic cosine of the input signal.","title":"(ma.)acosh"},{"location":"libs/maths/#usage_19","text":"_ : acosh : _","title":"Usage"},{"location":"libs/maths/#maasinh","text":"Computes the inverse hyperbolic sine of the input signal.","title":"(ma.)asinh"},{"location":"libs/maths/#usage_20","text":"_ : asinh : _","title":"Usage"},{"location":"libs/maths/#maatanh","text":"Computes the inverse hyperbolic tangent of the input signal.","title":"(ma.)atanh"},{"location":"libs/maths/#usage_21","text":"_ : atanh : _","title":"Usage"},{"location":"libs/maths/#masinh","text":"Computes the hyperbolic sine of the input signal.","title":"(ma.)sinh"},{"location":"libs/maths/#usage_22","text":"_ : sinh : _","title":"Usage"},{"location":"libs/maths/#macosh","text":"Computes the hyperbolic cosine of the input signal.","title":"(ma.)cosh"},{"location":"libs/maths/#usage_23","text":"_ : cosh : _","title":"Usage"},{"location":"libs/maths/#matanh","text":"Computes the hyperbolic tangent of the input signal.","title":"(ma.)tanh"},{"location":"libs/maths/#usage_24","text":"_ : tanh : _","title":"Usage"},{"location":"libs/maths/#maerf","text":"Computes the error function of the input signal.","title":"(ma.)erf"},{"location":"libs/maths/#usage_25","text":"_ : erf : _","title":"Usage"},{"location":"libs/maths/#maerfc","text":"Computes the complementary error function of the input signal.","title":"(ma.)erfc"},{"location":"libs/maths/#usage_26","text":"_ : erfc : _","title":"Usage"},{"location":"libs/maths/#magamma","text":"Computes the gamma function of the input signal.","title":"(ma.)gamma"},{"location":"libs/maths/#usage_27","text":"_ : gamma : _","title":"Usage"},{"location":"libs/maths/#malgamma","text":"Calculates the natural logorithm of the absolute value of the gamma function of the input signal.","title":"(ma.)lgamma"},{"location":"libs/maths/#usage_28","text":"_ : lgamma : _","title":"Usage"},{"location":"libs/maths/#maj0","text":"Computes the Bessel function of the first kind of order 0 of the input signal.","title":"(ma.)J0"},{"location":"libs/maths/#usage_29","text":"_ : J0 : _","title":"Usage"},{"location":"libs/maths/#maj1","text":"Computes the Bessel function of the first kind of order 1 of the input signal.","title":"(ma.)J1"},{"location":"libs/maths/#usage_30","text":"_ : J1 : _","title":"Usage"},{"location":"libs/maths/#majn","text":"Computes the Bessel function of the first kind of order n (first input signal) of the second input signal.","title":"(ma.)Jn"},{"location":"libs/maths/#usage_31","text":"_,_ : Jn : _","title":"Usage"},{"location":"libs/maths/#may0","text":"Computes the linearly independent Bessel function of the second kind of order 0 of the input signal.","title":"(ma.)Y0"},{"location":"libs/maths/#usage_32","text":"_ : Y0 : _","title":"Usage"},{"location":"libs/maths/#may1","text":"Computes the linearly independent Bessel function of the second kind of order 1 of the input signal.","title":"(ma.)Y1"},{"location":"libs/maths/#usage_33","text":"_ : Y0 : _","title":"Usage"},{"location":"libs/maths/#mayn","text":"Computes the linearly independent Bessel function of the second kind of order n (first input signal) of the second input signal.","title":"(ma.)Yn"},{"location":"libs/maths/#usage_34","text":"_,_ : Yn : _","title":"Usage"},{"location":"libs/maths/#mafabs-mafmax-mafmin","text":"Just for compatibility... fabs = abs fmax = max fmin = min","title":"(ma.)fabs, (ma.)fmax, (ma.)fmin"},{"location":"libs/maths/#manp2","text":"Gives the next power of 2 of x.","title":"(ma.)np2"},{"location":"libs/maths/#usage_35","text":"np2(n) : _ Where: n : an integer","title":"Usage"},{"location":"libs/maths/#mafrac","text":"Gives the fractional part of n.","title":"(ma.)frac"},{"location":"libs/maths/#usage_36","text":"frac(n) : _ Where: n : a decimal number","title":"Usage"},{"location":"libs/maths/#mamodulo","text":"Modulus operation.","title":"(ma.)modulo"},{"location":"libs/maths/#usage_37","text":"modulo(x,N) : _ Where: x : the numerator N : the denominator","title":"Usage"},{"location":"libs/maths/#maisnan","text":"Return non-zero if x is a NaN.","title":"(ma.)isnan"},{"location":"libs/maths/#usage_38","text":"isnan(x) _ : isnan : _ Where: x : signal to analyse","title":"Usage"},{"location":"libs/maths/#maisinf","text":"Return non-zero if x is a positive or negative infinity.","title":"(ma.)isinf"},{"location":"libs/maths/#usage_39","text":"isinf(x) _ : isinf : _ Where: x : signal to analyse","title":"Usage"},{"location":"libs/maths/#machebychev","text":"Chebychev transformation of order n.","title":"(ma.)chebychev"},{"location":"libs/maths/#usage_40","text":"_ : chebychev(n) : _ Where: n : the order of the polynomial","title":"Usage"},{"location":"libs/maths/#semantics","text":"T[0](x) = 1, T[1](x) = x, T[n](x) = 2x*T[n-1](x) - T[n-2](x)","title":"Semantics"},{"location":"libs/maths/#reference_1","text":"http://en.wikipedia.org/wiki/Chebyshev_polynomial","title":"Reference"},{"location":"libs/maths/#machebychevpoly","text":"Linear combination of the first Chebyshev polynomials.","title":"(ma.)chebychevpoly"},{"location":"libs/maths/#usage_41","text":"_ : chebychevpoly((c0,c1,...,cn)) : _ Where: cn : the different Chebychevs polynomials such that: chebychevpoly((c0,c1,...,cn)) = Sum of chebychev(i)*ci","title":"Usage"},{"location":"libs/maths/#reference_2","text":"http://www.csounds.com/manual/html/chebyshevpoly.html","title":"Reference"},{"location":"libs/maths/#madiffn","text":"Negated first-order difference.","title":"(ma.)diffn"},{"location":"libs/maths/#usage_42","text":"_ : diffn : _","title":"Usage"},{"location":"libs/maths/#masignum","text":"The signum function signum(x) is defined as -1 for x<0, 0 for x==0, and 1 for x>0.","title":"(ma.)signum"},{"location":"libs/maths/#usage_43","text":"_ : signum : _","title":"Usage"},{"location":"libs/maths/#manextpow2","text":"The nextpow2(x) returns the lowest integer m such that 2^m >= x.","title":"(ma.)nextpow2"},{"location":"libs/maths/#usage_44","text":"2^nextpow2(n) Useful for allocating delay lines, e.g., delay(2^nextpow2(maxDelayNeeded), currentDelay);","title":"Usage"},{"location":"libs/maths/#mazc","text":"Indicator function for zero-crossing: it returns 1 if a zero-crossing occurs, 0 otherwise.","title":"(ma.)zc"},{"location":"libs/maths/#usage_45","text":"_ : zc : _","title":"Usage"},{"location":"libs/mi/","text":"mi.lib This ongoing work is the fruit of a collaboration between GRAME-CNCM and the ANIS (Arts Num\u00e9riques et Immersions Sensorielles) research group from GIPSA-Lab (Universit\u00e9 Grenoble Alpes). This library implements basic 1-DoF mass-interaction physics algorithms, allowing to declare and connect physical elements (masses, springs, non linear interactions, etc.) together to form topological networks. Models can be assembled by hand, however in more complex scenarios it is recommended to use a scripting tool (such as MIMS) to generate the FAUST signal routing for a given physical network. https://github.com/rmichon/mi_faust http://mi-creative.eu/tool_miFaust.html http://mi-creative.eu/paper_lac19.html Sources The core mass-interaction algorithms implemented in this library are in the public domain and are disclosed in the following scientific publications: Claude Cadoz, Annie Luciani, Jean-Loup Florens, Curtis Roads and Fran\u00e7oise Chabade. Responsive Input Devices and Sound Synthesis by Stimulation of Instrumental Mechanisms: The Cordis System. Computer Music Journal, Vol 8. No. 3, 1984. Claude Cadoz, Annie Luciani and Jean Loup Florens. CORDIS-ANIMA: A Modeling and Simulation System for Sound and Image Synthesis: The General Formalism. Computer Music Journal. Vol. 17, No. 1, 1993. Alexandros Kontogeorgakopoulos and Claude Cadoz. Cordis Anima Physical Modeling and Simulation System Analysis. In Proceedings of the Sound and Music Computing Conference (SMC-07), Lefkada, Greece, 2007. Nicolas Castagne, Claude Cadoz, Ali Allaoui and Olivier Tache. G3: Genesis Software Environment Update. In Proceedings of the International Computer Music Conference (ICMC-09), Montreal, Canada, 2009. Nicolas Castagn\u00e9 and Claude Cadoz. Genesis 3: Plate-forme pour la cr\u00e9ation musicale \u00e0 l'aide des mod\u00e8les physiques Cordis-Anima. In Proceedings of the Journ\u00e9e de l'Informatique Musicale, Grenoble, France, 2009. Edgar Berdahl and Julius O. Smith. An Introduction to the Synth-A-Modeler Compiler: Modular and Open-Source Sound Synthesis using Physical Models. In Proceedings of the Linux Audio Conference (LAC-12), Stanford, USA, 2012. James Leonard and Claude Cadoz. Physical Modelling Concepts for a Collection of Multisensory Virtual Musical Instruments. In Proceedings of the New Interfaces for Musical Expression (NIME-15) Conference, Baton Rouge, USA, 2015. Utility Functions These utility functions are used to help certain operations (e.g. define initial positions and velocities for physical elements). (mi.)initState Used to set initial delayed position values that must be initialised at step 0 of the physics simulation. If you develop any of your own modules, you will need to use this (see mass and springDamper algorithm codes for examples). Usage x: initState(x0) : _ Where: x : position value signal x0 : initial value for position Mass Algorithms All mass-type physical element functions are declared here. They all expect to receive a force input signal and produce a position signal. All physical parameters are expressed in sample-rate dependant values. (mi.)mass Implementation of a punctual mass element. Takes an input force and produces output position. Usage mass(m, grav, x0, xr0),_ : _ Where: m : mass value grav : gravity force value x0 : initial position xr0 : initial delayed position (inferred from initial velocity) (mi.)oscil Implementation of a simple linear harmonic oscillator. Takes an input force and produces output position. Usage oscil(m, k, z, grav, x0, xr0),_ : _ Where: m : mass value k : stiffness value z : damping value grav : gravity force value x0 : initial position xr0 : initial delayed position (inferred from initial velocity) (mi.)ground Implementation of a fixed point element. The position output produced by this module never changes, however it still expects a force input signal (for compliance with connection rules). Usage ground(x0),_ : _ Where: x0 : initial position (mi.)posInput Implementation of a position input module (driven by an outside signal). Takes two signal inputs: incoming force (which doesn't affect position) and the driving position signal. Usage posInput(x0),_,_ : _ Where: x0 : initial position Interaction Algorithms All interaction-type physical element functions are declared here. They each expect to receive two position signals (coming from the two mass-elements that they connect) and produce two equal and opposite force signals that must be routed back to the mass elements' inputs. All physical parameters are expressed in sample-rate dependant values. (mi.)spring Implementation of a linear elastic spring interaction. Usage spring(k, x1r, x2r),_,_ : _,_ Where: k : stiffness value x1r : initial delayed position of mass 1 (unused here) x2r : initial delayed position of mass 2 (unused here) (mi.)damper Implementation of a linear damper interaction. Beware: in 32bit precision mode, damping forces can become truncated if position values are not centered around zero! Usage damper(z, x1r, x2r),_,_ : _,_ Where: z : damping value x1r : initial delayed position of mass 1 x2r : initial delayed position of mass 2 (mi.)springDamper Implementation of a linear viscoelastic spring-damper interaction (a combination of the spring and damper modules). Usage springDamper(k, z, x1r, x2r),_,_ : _,_ Where: k : stiffness value z : damping value x1r : initial delayed position of mass 1 x2r : initial delayed position of mass 2 (mi.)nlSpringDamper2 Implementation of a non-linear viscoelastic spring-damper interaction containing a quadratic term (function of squared distance). Beware: at high displacements, this interaction will break numerical stability conditions ! The nlSpringDamperClipped is a safer option. Usage nlSpringDamper2(k, q, z, x1r, x2r),_,_ : _,_ Where: k : linear stiffness value q : quadratic stiffness value z : damping value x1r : initial delayed position of mass 1 x2r : initial delayed position of mass 2 (mi.)nlSpringDamper3 Implementation of a non-linear viscoelastic spring-damper interaction containing a cubic term (function of distance^3). Beware: at high displacements, this interaction will break numerical stability conditions ! The nlSpringDamperClipped is a safer option. Usage nlSpringDamper3(k, q, z, x1r, x2r),_,_ : _,_ Where: k : linear stiffness value q : cubic stiffness value z : damping value x1r : initial delayed position of mass 1 x2r : initial delayed position of mass 2 (mi.)nlSpringDamperClipped Implementation of a non-linear viscoelastic spring-damper interaction containing a cubic term (function of distance^3), bound by an upper linear stiffness (hard-clipping). This bounding means that when faced with strong displacements, the interaction profile will \"clip\" at a given point and never produce forces higher than the bounding equivalent linear spring, stopping models from becoming unstable. So far the interaction clips \"hard\" (with no soft-knee spline interpolation, etc.) Usage nlSpringDamperClipped(s, c, k, z, x1r, x2r),_,_ : _,_ Where: s : linear stiffness value c : cubic stiffness value k : upper-bound linear stiffness value z : (linear) damping value x1r : initial delayed position of mass 1 x2r : initial delayed position of mass 2 (mi.)nlPluck Implementation of a piecewise linear plucking interaction. The symmetric function provides a repulsive viscoelastic interaction upon contact, until a tipping point is reached (when the plucking occurs). The tipping point depends both on the stiffness and the distance scaling of the interaction. Usage nlPluck(knl, scale, z, x1r, x2r),_,_ : _,_ Where: knl : stiffness scaling parameter (vertical stretch of the NL function) scale : distance scaling parameter (horizontal stretch of the NL function) z : (linear) damping value x1r : initial delayed position of mass 1 x2r : initial delayed position of mass 2 (mi.)nlBow Implementation of a non-linear friction based interaction that allows for stick-slip bowing behaviour. Two versions are proposed : a piecewise linear function (very similar to the nlPluck) or a mathematical approximation (see Stefan Bilbao's book, Numerical Sound Synthesis). Usage nlBow(znl, scale, type, x1r, x2r),_,_ : _,_ Where: znl : friction scaling parameter (vertical stretch of the NL function) scale : velocity scaling parameter (horizontal stretch of the NL function) type : interaction profile (0 = piecewise linear, 1 = smooth function) x1r : initial delayed position of mass 1 x2r : initial delayed position of mass 2 (mi.)collision Implementation of a collision interaction, producing linear visco-elastic repulsion forces when two mass elements are interpenetrating. Usage collision(k, z, thres, x1r, x2r),_,_ : _,_ Where: k : collision stiffness parameter z : collision damping parameter thres : threshold distance for the contact between elements x1r : initial delayed position of mass 1 x2r : initial delayed position of mass 2 (mi.)nlCollisionClipped Implementation of a collision interaction, producing non-linear visco-elastic repulsion forces when two mass elements are interpenetrating. Bound by an upper stiffness value to maintain stability. This interaction is particularly useful for more realistic contact dynamics (greater difference in velocity provides sharper contacts, and reciprocally). Usage nlCollisionClipped(s, c, k, z, thres, x1r, x2r),_,_ : _,_ Where: s : collision linear stiffness parameter c : collision cubic stiffness parameter k : collision upper-bounding stiffness parameter z : collision damping parameter thres : threshold distance for the contact between elements x1r : initial delayed position of mass 1 x2r : initial delayed position of mass 2","title":" mi "},{"location":"libs/mi/#milib","text":"This ongoing work is the fruit of a collaboration between GRAME-CNCM and the ANIS (Arts Num\u00e9riques et Immersions Sensorielles) research group from GIPSA-Lab (Universit\u00e9 Grenoble Alpes). This library implements basic 1-DoF mass-interaction physics algorithms, allowing to declare and connect physical elements (masses, springs, non linear interactions, etc.) together to form topological networks. Models can be assembled by hand, however in more complex scenarios it is recommended to use a scripting tool (such as MIMS) to generate the FAUST signal routing for a given physical network. https://github.com/rmichon/mi_faust http://mi-creative.eu/tool_miFaust.html http://mi-creative.eu/paper_lac19.html","title":"mi.lib"},{"location":"libs/mi/#sources","text":"The core mass-interaction algorithms implemented in this library are in the public domain and are disclosed in the following scientific publications: Claude Cadoz, Annie Luciani, Jean-Loup Florens, Curtis Roads and Fran\u00e7oise Chabade. Responsive Input Devices and Sound Synthesis by Stimulation of Instrumental Mechanisms: The Cordis System. Computer Music Journal, Vol 8. No. 3, 1984. Claude Cadoz, Annie Luciani and Jean Loup Florens. CORDIS-ANIMA: A Modeling and Simulation System for Sound and Image Synthesis: The General Formalism. Computer Music Journal. Vol. 17, No. 1, 1993. Alexandros Kontogeorgakopoulos and Claude Cadoz. Cordis Anima Physical Modeling and Simulation System Analysis. In Proceedings of the Sound and Music Computing Conference (SMC-07), Lefkada, Greece, 2007. Nicolas Castagne, Claude Cadoz, Ali Allaoui and Olivier Tache. G3: Genesis Software Environment Update. In Proceedings of the International Computer Music Conference (ICMC-09), Montreal, Canada, 2009. Nicolas Castagn\u00e9 and Claude Cadoz. Genesis 3: Plate-forme pour la cr\u00e9ation musicale \u00e0 l'aide des mod\u00e8les physiques Cordis-Anima. In Proceedings of the Journ\u00e9e de l'Informatique Musicale, Grenoble, France, 2009. Edgar Berdahl and Julius O. Smith. An Introduction to the Synth-A-Modeler Compiler: Modular and Open-Source Sound Synthesis using Physical Models. In Proceedings of the Linux Audio Conference (LAC-12), Stanford, USA, 2012. James Leonard and Claude Cadoz. Physical Modelling Concepts for a Collection of Multisensory Virtual Musical Instruments. In Proceedings of the New Interfaces for Musical Expression (NIME-15) Conference, Baton Rouge, USA, 2015.","title":"Sources"},{"location":"libs/mi/#utility-functions","text":"These utility functions are used to help certain operations (e.g. define initial positions and velocities for physical elements).","title":"Utility Functions"},{"location":"libs/mi/#miinitstate","text":"Used to set initial delayed position values that must be initialised at step 0 of the physics simulation. If you develop any of your own modules, you will need to use this (see mass and springDamper algorithm codes for examples).","title":"(mi.)initState"},{"location":"libs/mi/#usage","text":"x: initState(x0) : _ Where: x : position value signal x0 : initial value for position","title":"Usage"},{"location":"libs/mi/#mass-algorithms","text":"All mass-type physical element functions are declared here. They all expect to receive a force input signal and produce a position signal. All physical parameters are expressed in sample-rate dependant values.","title":"Mass Algorithms"},{"location":"libs/mi/#mimass","text":"Implementation of a punctual mass element. Takes an input force and produces output position.","title":"(mi.)mass"},{"location":"libs/mi/#usage_1","text":"mass(m, grav, x0, xr0),_ : _ Where: m : mass value grav : gravity force value x0 : initial position xr0 : initial delayed position (inferred from initial velocity)","title":"Usage"},{"location":"libs/mi/#mioscil","text":"Implementation of a simple linear harmonic oscillator. Takes an input force and produces output position.","title":"(mi.)oscil"},{"location":"libs/mi/#usage_2","text":"oscil(m, k, z, grav, x0, xr0),_ : _ Where: m : mass value k : stiffness value z : damping value grav : gravity force value x0 : initial position xr0 : initial delayed position (inferred from initial velocity)","title":"Usage"},{"location":"libs/mi/#miground","text":"Implementation of a fixed point element. The position output produced by this module never changes, however it still expects a force input signal (for compliance with connection rules).","title":"(mi.)ground"},{"location":"libs/mi/#usage_3","text":"ground(x0),_ : _ Where: x0 : initial position","title":"Usage"},{"location":"libs/mi/#miposinput","text":"Implementation of a position input module (driven by an outside signal). Takes two signal inputs: incoming force (which doesn't affect position) and the driving position signal.","title":"(mi.)posInput"},{"location":"libs/mi/#usage_4","text":"posInput(x0),_,_ : _ Where: x0 : initial position","title":"Usage"},{"location":"libs/mi/#interaction-algorithms","text":"All interaction-type physical element functions are declared here. They each expect to receive two position signals (coming from the two mass-elements that they connect) and produce two equal and opposite force signals that must be routed back to the mass elements' inputs. All physical parameters are expressed in sample-rate dependant values.","title":"Interaction Algorithms"},{"location":"libs/mi/#mispring","text":"Implementation of a linear elastic spring interaction.","title":"(mi.)spring"},{"location":"libs/mi/#usage_5","text":"spring(k, x1r, x2r),_,_ : _,_ Where: k : stiffness value x1r : initial delayed position of mass 1 (unused here) x2r : initial delayed position of mass 2 (unused here)","title":"Usage"},{"location":"libs/mi/#midamper","text":"Implementation of a linear damper interaction. Beware: in 32bit precision mode, damping forces can become truncated if position values are not centered around zero!","title":"(mi.)damper"},{"location":"libs/mi/#usage_6","text":"damper(z, x1r, x2r),_,_ : _,_ Where: z : damping value x1r : initial delayed position of mass 1 x2r : initial delayed position of mass 2","title":"Usage"},{"location":"libs/mi/#mispringdamper","text":"Implementation of a linear viscoelastic spring-damper interaction (a combination of the spring and damper modules).","title":"(mi.)springDamper"},{"location":"libs/mi/#usage_7","text":"springDamper(k, z, x1r, x2r),_,_ : _,_ Where: k : stiffness value z : damping value x1r : initial delayed position of mass 1 x2r : initial delayed position of mass 2","title":"Usage"},{"location":"libs/mi/#minlspringdamper2","text":"Implementation of a non-linear viscoelastic spring-damper interaction containing a quadratic term (function of squared distance). Beware: at high displacements, this interaction will break numerical stability conditions ! The nlSpringDamperClipped is a safer option.","title":"(mi.)nlSpringDamper2"},{"location":"libs/mi/#usage_8","text":"nlSpringDamper2(k, q, z, x1r, x2r),_,_ : _,_ Where: k : linear stiffness value q : quadratic stiffness value z : damping value x1r : initial delayed position of mass 1 x2r : initial delayed position of mass 2","title":"Usage"},{"location":"libs/mi/#minlspringdamper3","text":"Implementation of a non-linear viscoelastic spring-damper interaction containing a cubic term (function of distance^3). Beware: at high displacements, this interaction will break numerical stability conditions ! The nlSpringDamperClipped is a safer option.","title":"(mi.)nlSpringDamper3"},{"location":"libs/mi/#usage_9","text":"nlSpringDamper3(k, q, z, x1r, x2r),_,_ : _,_ Where: k : linear stiffness value q : cubic stiffness value z : damping value x1r : initial delayed position of mass 1 x2r : initial delayed position of mass 2","title":"Usage"},{"location":"libs/mi/#minlspringdamperclipped","text":"Implementation of a non-linear viscoelastic spring-damper interaction containing a cubic term (function of distance^3), bound by an upper linear stiffness (hard-clipping). This bounding means that when faced with strong displacements, the interaction profile will \"clip\" at a given point and never produce forces higher than the bounding equivalent linear spring, stopping models from becoming unstable. So far the interaction clips \"hard\" (with no soft-knee spline interpolation, etc.)","title":"(mi.)nlSpringDamperClipped"},{"location":"libs/mi/#usage_10","text":"nlSpringDamperClipped(s, c, k, z, x1r, x2r),_,_ : _,_ Where: s : linear stiffness value c : cubic stiffness value k : upper-bound linear stiffness value z : (linear) damping value x1r : initial delayed position of mass 1 x2r : initial delayed position of mass 2","title":"Usage"},{"location":"libs/mi/#minlpluck","text":"Implementation of a piecewise linear plucking interaction. The symmetric function provides a repulsive viscoelastic interaction upon contact, until a tipping point is reached (when the plucking occurs). The tipping point depends both on the stiffness and the distance scaling of the interaction.","title":"(mi.)nlPluck"},{"location":"libs/mi/#usage_11","text":"nlPluck(knl, scale, z, x1r, x2r),_,_ : _,_ Where: knl : stiffness scaling parameter (vertical stretch of the NL function) scale : distance scaling parameter (horizontal stretch of the NL function) z : (linear) damping value x1r : initial delayed position of mass 1 x2r : initial delayed position of mass 2","title":"Usage"},{"location":"libs/mi/#minlbow","text":"Implementation of a non-linear friction based interaction that allows for stick-slip bowing behaviour. Two versions are proposed : a piecewise linear function (very similar to the nlPluck) or a mathematical approximation (see Stefan Bilbao's book, Numerical Sound Synthesis).","title":"(mi.)nlBow"},{"location":"libs/mi/#usage_12","text":"nlBow(znl, scale, type, x1r, x2r),_,_ : _,_ Where: znl : friction scaling parameter (vertical stretch of the NL function) scale : velocity scaling parameter (horizontal stretch of the NL function) type : interaction profile (0 = piecewise linear, 1 = smooth function) x1r : initial delayed position of mass 1 x2r : initial delayed position of mass 2","title":"Usage"},{"location":"libs/mi/#micollision","text":"Implementation of a collision interaction, producing linear visco-elastic repulsion forces when two mass elements are interpenetrating.","title":"(mi.)collision"},{"location":"libs/mi/#usage_13","text":"collision(k, z, thres, x1r, x2r),_,_ : _,_ Where: k : collision stiffness parameter z : collision damping parameter thres : threshold distance for the contact between elements x1r : initial delayed position of mass 1 x2r : initial delayed position of mass 2","title":"Usage"},{"location":"libs/mi/#minlcollisionclipped","text":"Implementation of a collision interaction, producing non-linear visco-elastic repulsion forces when two mass elements are interpenetrating. Bound by an upper stiffness value to maintain stability. This interaction is particularly useful for more realistic contact dynamics (greater difference in velocity provides sharper contacts, and reciprocally).","title":"(mi.)nlCollisionClipped"},{"location":"libs/mi/#usage_14","text":"nlCollisionClipped(s, c, k, z, thres, x1r, x2r),_,_ : _,_ Where: s : collision linear stiffness parameter c : collision cubic stiffness parameter k : collision upper-bounding stiffness parameter z : collision damping parameter thres : threshold distance for the contact between elements x1r : initial delayed position of mass 1 x2r : initial delayed position of mass 2","title":"Usage"},{"location":"libs/misceffects/","text":"misceffects.lib This library contains a collection of audio effects. Its official prefix is ef . Dynamic (ef.)cubicnl Cubic nonlinearity distortion. cubicnl is a standard Faust library. Usage: _ : cubicnl(drive,offset) : _ _ : cubicnl_nodc(drive,offset) : _ Where: drive : distortion amount, between 0 and 1 offset : constant added before nonlinearity to give even harmonics. Note: offset can introduce a nonzero mean - feed cubicnl output to dcblocker to remove this. References: https://ccrma.stanford.edu/~jos/pasp/Cubic_Soft_Clipper.html https://ccrma.stanford.edu/~jos/pasp/Nonlinear_Distortion.html (ef.)gate_mono Mono signal gate. gate_mono is a standard Faust function. Usage _ : gate_mono(thresh,att,hold,rel) : _ Where: thresh : dB level threshold above which gate opens (e.g., -60 dB) att : attack time = time constant (sec) for gate to open (e.g., 0.0001 s = 0.1 ms) hold : hold time = time (sec) gate stays open after signal level < thresh (e.g., 0.1 s) rel : release time = time constant (sec) for gate to close (e.g., 0.020 s = 20 ms) References http://en.wikipedia.org/wiki/Noise_gate http://www.soundonsound.com/sos/apr01/articles/advanced.asp http://en.wikipedia.org/wiki/Gating_(sound_engineering) (ef.)gate_stereo Stereo signal gates. gate_stereo is a standard Faust function. Usage _,_ : gate_stereo(thresh,att,hold,rel) : _,_ Where: thresh : dB level threshold above which gate opens (e.g., -60 dB) att : attack time = time constant (sec) for gate to open (e.g., 0.0001 s = 0.1 ms) hold : hold time = time (sec) gate stays open after signal level < thresh (e.g., 0.1 s) rel : release time = time constant (sec) for gate to close (e.g., 0.020 s = 20 ms) References http://en.wikipedia.org/wiki/Noise_gate http://www.soundonsound.com/sos/apr01/articles/advanced.asp http://en.wikipedia.org/wiki/Gating_(sound_engineering) Filtering (ef.)speakerbp Dirt-simple speaker simulator (overall bandpass eq with observed roll-offs above and below the passband). Low-frequency speaker model = +12 dB/octave slope breaking to flat near f1. Implemented using two dc blockers in series. High-frequency model = -24 dB/octave slope implemented using a fourth-order Butterworth lowpass. Example based on measured Celestion G12 (12\" speaker): speakerbp is a standard Faust function Usage speakerbp(f1,f2) _ : speakerbp(130,5000) : _ (ef.)piano_dispersion_filter Piano dispersion allpass filter in closed form. Usage piano_dispersion_filter(M,B,f0) _ : piano_dispersion_filter(1,B,f0) : +(totalDelay),_ : fdelay(maxDelay) : _ Where: M : number of first-order allpass sections (compile-time only) Keep below 20. 8 is typical for medium-sized piano strings. B : string inharmonicity coefficient (0.0001 is typical) f0 : fundamental frequency in Hz Outputs MINUS the estimated delay at f0 of allpass chain in samples, provided in negative form to facilitate subtraction from delay-line length. Output signal from allpass chain Reference \"Dispersion Modeling in Waveguide Piano Synthesis Using Tunable Allpass Filters\", by Jukka Rauhala and Vesa Valimaki, DAFX-2006, pp. 71-76 http://lib.tkk.fi/Diss/2007/isbn9789512290666/article2.pdf An erratum in Eq. (7) is corrected in Dr. Rauhala's encompassing dissertation (and below). http://www.acoustics.hut.fi/research/asp/piano/ (ef.)stereo_width Stereo Width effect using the Blumlein Shuffler technique. stereo_width is a standard Faust function. Usage _,_ : stereo_width(w) : _,_ Where: w : stereo width between 0 and 1 At w=0 , the output signal is mono ((left+right)/2 in both channels). At w=1 , there is no effect (original stereo image). Thus, w between 0 and 1 varies stereo width from 0 to \"original\". Reference \"Applications of Blumlein Shuffling to Stereo Microphone Techniques\" Michael A. Gerzon, JAES vol. 42, no. 6, June 1994 Meshes (ef.)mesh_square Square Rectangular Digital Waveguide Mesh. Usage bus(4*N) : mesh_square(N) : bus(4*N); Where: N : number of nodes along each edge - a power of two (1,2,4,8,...) Reference https://ccrma.stanford.edu/~jos/pasp/Digital_Waveguide_Mesh.html Signal Order In and Out The mesh is constructed recursively using 2x2 embeddings. Thus, the top level of mesh_square(M) is a block 2x2 mesh, where each block is a mesh(M/2) . Let these blocks be numbered 1,2,3,4 in the geometry NW,NE,SW,SE, i.e., as 1 2 3 4 Each block has four vector inputs and four vector outputs, where the length of each vector is M/2 . Label the input vectors as Ni,Ei,Wi,Si, i.e., as the inputs from the North, East South, and West, and similarly for the outputs. Then, for example, the upper left input block of M/2 signals is labeled 1Ni. Most of the connections are internal, such as 1Eo -> 2Wi. The 8*(M/2) input signals are grouped in the order 1Ni 2Ni 3Si 4Si 1Wi 3Wi 2Ei 4Ei and the output signals are 1No 1Wo 2No 2Eo 3So 3Wo 4So 4Eo or In: 1No 1Wo 2No 2Eo 3So 3Wo 4So 4Eo Out: 1Ni 2Ni 3Si 4Si 1Wi 3Wi 2Ei 4Ei Thus, the inputs are grouped by direction N,S,W,E, while the outputs are grouped by block number 1,2,3,4, which can also be interpreted as directions NW, NE, SW, SE. A simple program illustrating these orderings is process = mesh_square(2); . Example Reflectively terminated mesh impulsed at one corner: mesh_square_test(N,x) = mesh_square(N)~(busi(4*N,x)) // input to corner with { busi(N,x) = bus(N) : par(i,N,*(-1)) : par(i,N-1,_), +(x); }; process = 1-1' : mesh_square_test(4); // all modes excited forever In this simple example, the mesh edges are connected as follows: 1No -> 1Ni, 1Wo -> 2Ni, 2No -> 3Si, 2Eo -> 4Si, 3So -> 1Wi, 3Wo -> 3Wi, 4So -> 2Ei, 4Eo -> 4Ei A routing matrix can be used to obtain other connection geometries. (ef.)reverseEchoN(nChans,delay) Reverse echo effect Usage _ : ef.reverseEchoN(N,delay) : si.bus(N) Where: N : Number of channels desired (1 or more) delay : echo delay (integer power of 2) Demo _ : dm.reverseEchoN(N) : _,_ Description The effect uses N instances of reverseDelayRamped at different phases. (ef.)reverseDelayRamped(delay,phase) Reverse delay with amplitude ramp Usage _ : ef.reverseDelayRamped(delay,phase) : _ Where: delay : echo delay (integer power of 2) phase : float between 0 and 1 giving ramp delay phase*delay Demo _ : dm.reverseEchoN(N) : _,_ (ef.)uniformPanToStereo(nChans) Pan nChans channels to the stereo field, spread uniformly left to right Usage si.bus(N) : ef.uniformPanToStereo(N) : _,_ Where: N : Number of input channels to pan down to stereo Demo _ : dm.reverseEchoN(N) : _,_ Time Based (ef.)echo A simple echo effect. echo is a standard Faust function Usage _ : echo(maxDuration,duration,feedback) : _ Where: maxDuration : the max echo duration in seconds duration : the echo duration in seconds feedback : the feedback coefficient Pitch Shifting (ef.)transpose A simple pitch shifter based on 2 delay lines. transpose is a standard Faust function. Usage _ : transpose(w, x, s) : _ Where: w : the window length (samples) x : crossfade duration duration (samples) s : shift (semitones)","title":" misceffects "},{"location":"libs/misceffects/#misceffectslib","text":"This library contains a collection of audio effects. Its official prefix is ef .","title":"misceffects.lib"},{"location":"libs/misceffects/#dynamic","text":"","title":"Dynamic"},{"location":"libs/misceffects/#efcubicnl","text":"Cubic nonlinearity distortion. cubicnl is a standard Faust library.","title":"(ef.)cubicnl"},{"location":"libs/misceffects/#usage","text":"_ : cubicnl(drive,offset) : _ _ : cubicnl_nodc(drive,offset) : _ Where: drive : distortion amount, between 0 and 1 offset : constant added before nonlinearity to give even harmonics. Note: offset can introduce a nonzero mean - feed cubicnl output to dcblocker to remove this.","title":"Usage:"},{"location":"libs/misceffects/#references","text":"https://ccrma.stanford.edu/~jos/pasp/Cubic_Soft_Clipper.html https://ccrma.stanford.edu/~jos/pasp/Nonlinear_Distortion.html","title":"References:"},{"location":"libs/misceffects/#efgate_mono","text":"Mono signal gate. gate_mono is a standard Faust function.","title":"(ef.)gate_mono"},{"location":"libs/misceffects/#usage_1","text":"_ : gate_mono(thresh,att,hold,rel) : _ Where: thresh : dB level threshold above which gate opens (e.g., -60 dB) att : attack time = time constant (sec) for gate to open (e.g., 0.0001 s = 0.1 ms) hold : hold time = time (sec) gate stays open after signal level < thresh (e.g., 0.1 s) rel : release time = time constant (sec) for gate to close (e.g., 0.020 s = 20 ms)","title":"Usage"},{"location":"libs/misceffects/#references_1","text":"http://en.wikipedia.org/wiki/Noise_gate http://www.soundonsound.com/sos/apr01/articles/advanced.asp http://en.wikipedia.org/wiki/Gating_(sound_engineering)","title":"References"},{"location":"libs/misceffects/#efgate_stereo","text":"Stereo signal gates. gate_stereo is a standard Faust function.","title":"(ef.)gate_stereo"},{"location":"libs/misceffects/#usage_2","text":"_,_ : gate_stereo(thresh,att,hold,rel) : _,_ Where: thresh : dB level threshold above which gate opens (e.g., -60 dB) att : attack time = time constant (sec) for gate to open (e.g., 0.0001 s = 0.1 ms) hold : hold time = time (sec) gate stays open after signal level < thresh (e.g., 0.1 s) rel : release time = time constant (sec) for gate to close (e.g., 0.020 s = 20 ms)","title":"Usage"},{"location":"libs/misceffects/#references_2","text":"http://en.wikipedia.org/wiki/Noise_gate http://www.soundonsound.com/sos/apr01/articles/advanced.asp http://en.wikipedia.org/wiki/Gating_(sound_engineering)","title":"References"},{"location":"libs/misceffects/#filtering","text":"","title":"Filtering"},{"location":"libs/misceffects/#efspeakerbp","text":"Dirt-simple speaker simulator (overall bandpass eq with observed roll-offs above and below the passband). Low-frequency speaker model = +12 dB/octave slope breaking to flat near f1. Implemented using two dc blockers in series. High-frequency model = -24 dB/octave slope implemented using a fourth-order Butterworth lowpass. Example based on measured Celestion G12 (12\" speaker): speakerbp is a standard Faust function","title":"(ef.)speakerbp"},{"location":"libs/misceffects/#usage_3","text":"speakerbp(f1,f2) _ : speakerbp(130,5000) : _","title":"Usage"},{"location":"libs/misceffects/#efpiano_dispersion_filter","text":"Piano dispersion allpass filter in closed form.","title":"(ef.)piano_dispersion_filter"},{"location":"libs/misceffects/#usage_4","text":"piano_dispersion_filter(M,B,f0) _ : piano_dispersion_filter(1,B,f0) : +(totalDelay),_ : fdelay(maxDelay) : _ Where: M : number of first-order allpass sections (compile-time only) Keep below 20. 8 is typical for medium-sized piano strings. B : string inharmonicity coefficient (0.0001 is typical) f0 : fundamental frequency in Hz","title":"Usage"},{"location":"libs/misceffects/#outputs","text":"MINUS the estimated delay at f0 of allpass chain in samples, provided in negative form to facilitate subtraction from delay-line length. Output signal from allpass chain","title":"Outputs"},{"location":"libs/misceffects/#reference","text":"\"Dispersion Modeling in Waveguide Piano Synthesis Using Tunable Allpass Filters\", by Jukka Rauhala and Vesa Valimaki, DAFX-2006, pp. 71-76 http://lib.tkk.fi/Diss/2007/isbn9789512290666/article2.pdf An erratum in Eq. (7) is corrected in Dr. Rauhala's encompassing dissertation (and below). http://www.acoustics.hut.fi/research/asp/piano/","title":"Reference"},{"location":"libs/misceffects/#efstereo_width","text":"Stereo Width effect using the Blumlein Shuffler technique. stereo_width is a standard Faust function.","title":"(ef.)stereo_width"},{"location":"libs/misceffects/#usage_5","text":"_,_ : stereo_width(w) : _,_ Where: w : stereo width between 0 and 1 At w=0 , the output signal is mono ((left+right)/2 in both channels). At w=1 , there is no effect (original stereo image). Thus, w between 0 and 1 varies stereo width from 0 to \"original\".","title":"Usage"},{"location":"libs/misceffects/#reference_1","text":"\"Applications of Blumlein Shuffling to Stereo Microphone Techniques\" Michael A. Gerzon, JAES vol. 42, no. 6, June 1994","title":"Reference"},{"location":"libs/misceffects/#meshes","text":"","title":"Meshes"},{"location":"libs/misceffects/#efmesh_square","text":"Square Rectangular Digital Waveguide Mesh.","title":"(ef.)mesh_square"},{"location":"libs/misceffects/#usage_6","text":"bus(4*N) : mesh_square(N) : bus(4*N); Where: N : number of nodes along each edge - a power of two (1,2,4,8,...)","title":"Usage"},{"location":"libs/misceffects/#reference_2","text":"https://ccrma.stanford.edu/~jos/pasp/Digital_Waveguide_Mesh.html","title":"Reference"},{"location":"libs/misceffects/#signal-order-in-and-out","text":"The mesh is constructed recursively using 2x2 embeddings. Thus, the top level of mesh_square(M) is a block 2x2 mesh, where each block is a mesh(M/2) . Let these blocks be numbered 1,2,3,4 in the geometry NW,NE,SW,SE, i.e., as 1 2 3 4 Each block has four vector inputs and four vector outputs, where the length of each vector is M/2 . Label the input vectors as Ni,Ei,Wi,Si, i.e., as the inputs from the North, East South, and West, and similarly for the outputs. Then, for example, the upper left input block of M/2 signals is labeled 1Ni. Most of the connections are internal, such as 1Eo -> 2Wi. The 8*(M/2) input signals are grouped in the order 1Ni 2Ni 3Si 4Si 1Wi 3Wi 2Ei 4Ei and the output signals are 1No 1Wo 2No 2Eo 3So 3Wo 4So 4Eo or In: 1No 1Wo 2No 2Eo 3So 3Wo 4So 4Eo Out: 1Ni 2Ni 3Si 4Si 1Wi 3Wi 2Ei 4Ei Thus, the inputs are grouped by direction N,S,W,E, while the outputs are grouped by block number 1,2,3,4, which can also be interpreted as directions NW, NE, SW, SE. A simple program illustrating these orderings is process = mesh_square(2); .","title":"Signal Order In and Out"},{"location":"libs/misceffects/#example","text":"Reflectively terminated mesh impulsed at one corner: mesh_square_test(N,x) = mesh_square(N)~(busi(4*N,x)) // input to corner with { busi(N,x) = bus(N) : par(i,N,*(-1)) : par(i,N-1,_), +(x); }; process = 1-1' : mesh_square_test(4); // all modes excited forever In this simple example, the mesh edges are connected as follows: 1No -> 1Ni, 1Wo -> 2Ni, 2No -> 3Si, 2Eo -> 4Si, 3So -> 1Wi, 3Wo -> 3Wi, 4So -> 2Ei, 4Eo -> 4Ei A routing matrix can be used to obtain other connection geometries.","title":"Example"},{"location":"libs/misceffects/#efreverseechonnchansdelay","text":"Reverse echo effect","title":"(ef.)reverseEchoN(nChans,delay)"},{"location":"libs/misceffects/#usage_7","text":"_ : ef.reverseEchoN(N,delay) : si.bus(N) Where: N : Number of channels desired (1 or more) delay : echo delay (integer power of 2)","title":"Usage"},{"location":"libs/misceffects/#demo","text":"_ : dm.reverseEchoN(N) : _,_","title":"Demo"},{"location":"libs/misceffects/#description","text":"The effect uses N instances of reverseDelayRamped at different phases.","title":"Description"},{"location":"libs/misceffects/#efreversedelayrampeddelayphase","text":"Reverse delay with amplitude ramp","title":"(ef.)reverseDelayRamped(delay,phase)"},{"location":"libs/misceffects/#usage_8","text":"_ : ef.reverseDelayRamped(delay,phase) : _ Where: delay : echo delay (integer power of 2) phase : float between 0 and 1 giving ramp delay phase*delay","title":"Usage"},{"location":"libs/misceffects/#demo_1","text":"_ : dm.reverseEchoN(N) : _,_","title":"Demo"},{"location":"libs/misceffects/#efuniformpantostereonchans","text":"Pan nChans channels to the stereo field, spread uniformly left to right","title":"(ef.)uniformPanToStereo(nChans)"},{"location":"libs/misceffects/#usage_9","text":"si.bus(N) : ef.uniformPanToStereo(N) : _,_ Where: N : Number of input channels to pan down to stereo","title":"Usage"},{"location":"libs/misceffects/#demo_2","text":"_ : dm.reverseEchoN(N) : _,_","title":"Demo"},{"location":"libs/misceffects/#time-based","text":"","title":"Time Based"},{"location":"libs/misceffects/#efecho","text":"A simple echo effect. echo is a standard Faust function","title":"(ef.)echo"},{"location":"libs/misceffects/#usage_10","text":"_ : echo(maxDuration,duration,feedback) : _ Where: maxDuration : the max echo duration in seconds duration : the echo duration in seconds feedback : the feedback coefficient","title":"Usage"},{"location":"libs/misceffects/#pitch-shifting","text":"","title":"Pitch Shifting"},{"location":"libs/misceffects/#eftranspose","text":"A simple pitch shifter based on 2 delay lines. transpose is a standard Faust function.","title":"(ef.)transpose"},{"location":"libs/misceffects/#usage_11","text":"_ : transpose(w, x, s) : _ Where: w : the window length (samples) x : crossfade duration duration (samples) s : shift (semitones)","title":"Usage"},{"location":"libs/noises/","text":"noises.lib Faust Noise Generator Library. Its official prefix is no . Functions Reference (no.)noise White noise generator (outputs random number between -1 and 1). Noise is a standard Faust function. Usage noise : _ (no.)multirandom Generates multiple decorrelated random numbers in parallel. Usage multirandom(n) : si.bus(n) Where: n : the number of decorrelated random numbers in parallel (no.)multinoise Generates multiple decorrelated noises in parallel. Usage multinoise(n) : si.bus(n) Where: n : the number of decorrelated random numbers in parallel (no.)noises TODO. (no.)pink_noise Pink noise (1/f noise) generator (third-order approximation) pink_noise is a standard Faust function. Usage pink_noise : _; Reference: https://ccrma.stanford.edu/~jos/sasp/Example_Synthesis_1_F_Noise.html (no.)pink_noise_vm Multi pink noise generator. Usage pink_noise_vm(N) : _; Where: N : number of latched white-noise processes to sum, not to exceed sizeof(int) in C++ (typically 32). References http://www.dsprelated.com/showarticle/908.php http://www.firstpr.com.au/dsp/pink-noise/#Voss-McCartney (no.)lfnoise , (no.)lfnoise0 and (no.)lfnoiseN Low-frequency noise generators (Butterworth-filtered downsampled white noise). Usage lfnoise0(rate) : _; new random number every int(SR/rate) samples or so lfnoiseN(N,rate) : _; same as \"lfnoise0(rate) : lowpass(N,rate)\" [see filters.lib] lfnoise(rate) : _; same as \"lfnoise0(rate) : seq(i,5,lowpass(N,rate))\" (no overshoot) Example (view waveforms in faust2octave): rate = SR/100.0; new random value every 100 samples (SR from music.lib) process = lfnoise0(rate), sampled/held noise (piecewise constant) lfnoiseN(3,rate), lfnoise0 smoothed by 3rd order Butterworth LPF lfnoise(rate); lfnoise0 smoothed with no overshoot (no.)sparse_noise_vm sparse noise generator. Usage sparse_noise(f0) : _; Where: f0 : average frequency of noise impulses per second Random impulses in the amplitude range -1 to 1 are generated at an average rate of f0 impulses per second. Reference See velvet_noise (no.)velvet_noise_vm velvet noise generator. Usage velvet_noise(amp,f0) : _; Where: amp : amplitude of noise impulses (positive and negative) f0 : average frequency of noise impulses per second Reference Matti Karjalainen and Hanna Jarvelainen, \"Reverberation Modeling Using Velvet Noise\", in Proc. 30th Int. Conf. Intelligent Audio Environments (AES07), March 2007. (no.)gnoise approximate zero-mean, unit-variance Gaussian white noise generator. Usage gnoise(N) : _; Where: N : number of uniform random numbers added to approximate Gaussian white noise Reference See Central Limit Theorem","title":" noises "},{"location":"libs/noises/#noiseslib","text":"Faust Noise Generator Library. Its official prefix is no .","title":"noises.lib"},{"location":"libs/noises/#functions-reference","text":"","title":"Functions Reference"},{"location":"libs/noises/#nonoise","text":"White noise generator (outputs random number between -1 and 1). Noise is a standard Faust function.","title":"(no.)noise"},{"location":"libs/noises/#usage","text":"noise : _","title":"Usage"},{"location":"libs/noises/#nomultirandom","text":"Generates multiple decorrelated random numbers in parallel.","title":"(no.)multirandom"},{"location":"libs/noises/#usage_1","text":"multirandom(n) : si.bus(n) Where: n : the number of decorrelated random numbers in parallel","title":"Usage"},{"location":"libs/noises/#nomultinoise","text":"Generates multiple decorrelated noises in parallel.","title":"(no.)multinoise"},{"location":"libs/noises/#usage_2","text":"multinoise(n) : si.bus(n) Where: n : the number of decorrelated random numbers in parallel","title":"Usage"},{"location":"libs/noises/#nonoises","text":"TODO.","title":"(no.)noises"},{"location":"libs/noises/#nopink_noise","text":"Pink noise (1/f noise) generator (third-order approximation) pink_noise is a standard Faust function.","title":"(no.)pink_noise"},{"location":"libs/noises/#usage_3","text":"pink_noise : _;","title":"Usage"},{"location":"libs/noises/#reference","text":"https://ccrma.stanford.edu/~jos/sasp/Example_Synthesis_1_F_Noise.html","title":"Reference:"},{"location":"libs/noises/#nopink_noise_vm","text":"Multi pink noise generator.","title":"(no.)pink_noise_vm"},{"location":"libs/noises/#usage_4","text":"pink_noise_vm(N) : _; Where: N : number of latched white-noise processes to sum, not to exceed sizeof(int) in C++ (typically 32).","title":"Usage"},{"location":"libs/noises/#references","text":"http://www.dsprelated.com/showarticle/908.php http://www.firstpr.com.au/dsp/pink-noise/#Voss-McCartney","title":"References"},{"location":"libs/noises/#nolfnoise-nolfnoise0-and-nolfnoisen","text":"Low-frequency noise generators (Butterworth-filtered downsampled white noise).","title":"(no.)lfnoise, (no.)lfnoise0 and (no.)lfnoiseN"},{"location":"libs/noises/#usage_5","text":"lfnoise0(rate) : _; new random number every int(SR/rate) samples or so lfnoiseN(N,rate) : _; same as \"lfnoise0(rate) : lowpass(N,rate)\" [see filters.lib] lfnoise(rate) : _; same as \"lfnoise0(rate) : seq(i,5,lowpass(N,rate))\" (no overshoot)","title":"Usage"},{"location":"libs/noises/#example","text":"(view waveforms in faust2octave): rate = SR/100.0; new random value every 100 samples (SR from music.lib) process = lfnoise0(rate), sampled/held noise (piecewise constant) lfnoiseN(3,rate), lfnoise0 smoothed by 3rd order Butterworth LPF lfnoise(rate); lfnoise0 smoothed with no overshoot","title":"Example"},{"location":"libs/noises/#nosparse_noise_vm","text":"sparse noise generator.","title":"(no.)sparse_noise_vm"},{"location":"libs/noises/#usage_6","text":"sparse_noise(f0) : _; Where: f0 : average frequency of noise impulses per second Random impulses in the amplitude range -1 to 1 are generated at an average rate of f0 impulses per second.","title":"Usage"},{"location":"libs/noises/#reference_1","text":"See velvet_noise","title":"Reference"},{"location":"libs/noises/#novelvet_noise_vm","text":"velvet noise generator.","title":"(no.)velvet_noise_vm"},{"location":"libs/noises/#usage_7","text":"velvet_noise(amp,f0) : _; Where: amp : amplitude of noise impulses (positive and negative) f0 : average frequency of noise impulses per second","title":"Usage"},{"location":"libs/noises/#reference_2","text":"Matti Karjalainen and Hanna Jarvelainen, \"Reverberation Modeling Using Velvet Noise\", in Proc. 30th Int. Conf. Intelligent Audio Environments (AES07), March 2007.","title":"Reference"},{"location":"libs/noises/#nognoise","text":"approximate zero-mean, unit-variance Gaussian white noise generator.","title":"(no.)gnoise"},{"location":"libs/noises/#usage_8","text":"gnoise(N) : _; Where: N : number of uniform random numbers added to approximate Gaussian white noise","title":"Usage"},{"location":"libs/noises/#reference_3","text":"See Central Limit Theorem","title":"Reference"},{"location":"libs/oscillators/","text":"oscillators.lib This library contains a collection of sound generators. Its official prefix is os . Wave-Table-Based Oscillators (os.)sinwaveform Sine waveform ready to use with a rdtable . Usage sinwaveform(tablesize) : _ Where: tablesize : the table size (os.)coswaveform Cosine waveform ready to use with a rdtable . Usage coswaveform(tablesize) : _ Where: tablesize : the table size (os.)phasor A simple phasor to be used with a rdtable . phasor is a standard Faust function. Usage phasor(tablesize,freq) : _ Where: tablesize : the table size freq : the frequency of the phasor (Hz) (os.)hs_phasor Hardsyncing phasor to be used with an rdtable . Usage hs_phasor(tablesize,freq,c) : _ Where: tablesize : the table size freq : the frequency of the phasor (Hz) c : a clock signal, c>0 resets phase to 0 (os.)hsp_phasor Hardsyncing phasor with selectable phase to be used with an rdtable . Usage hsp_phasor(tablesize,freq,p,c) Where: tablesize : the table size freq : the frequency of the phasor (Hz) p : phase init (0 <= p <=1) c : a clock signal, c>0 resets phase to 0 (os.)oscsin Sine wave oscillator. oscsin is a standard Faust function. Usage oscsin(freq) : _ Where: freq : the frequency of the wave (Hz) (os.)hs_oscsin Sin lookup table with hardsyncing phase. Usage hs_oscsin(freq,c) : _ Where: freq : the fundamental frequency of the phasor c : a clock signal, c>0 resets phase to 0 (os.)osccos Cosine wave oscillator. Usage osccos(freq) : _ Where: freq : the frequency of the wave (Hz) (os.)oscp A sine wave generator with controllable phase. Usage oscp(freq,phase) : _ Where: freq : the frequency of the wave (Hz) phase : the phase in radian (os.)osci Interpolated phase sine wave oscillator. Usage osci(freq) : _ Where: freq : the frequency of the wave (Hz) LFOs Low-Frequency Oscillators (LFOs) have prefix lf_ (no aliasing suppression, which is not audible at LF). (os.)lf_imptrain Unit-amplitude low-frequency impulse train. lf_imptrain is a standard Faust function. Usage lf_imptrain(freq) : _ Where: freq : frequency in Hz (os.)lf_pulsetrainpos Unit-amplitude nonnegative LF pulse train, duty cycle between 0 and 1. Usage lf_pulsetrainpos(freq,duty) : _ Where: freq : frequency in Hz duty : duty cycle between 0 and 1 (os.)lf_pulsetrain Unit-amplitude zero-mean LF pulse train, duty cycle between 0 and 1. Usage lf_pulsetrain(freq,duty) : _ Where: freq : frequency in Hz duty : duty cycle between 0 and 1 (os.)lf_squarewavepos Positive LF square wave in [0,1] Usage lf_squarewavepos(freq) : _ Where: freq : frequency in Hz (os.)lf_squarewave Zero-mean unit-amplitude LF square wave. lf_squarewave is a standard Faust function. Usage lf_squarewave(freq) : _ Where: freq : frequency in Hz (os.)lf_trianglepos Positive unit-amplitude LF positive triangle wave. Usage lf_trianglepos(freq) : _ Where: freq : frequency in Hz (os.)lf_triangle Positive unit-amplitude LF triangle wave lf_triangle is a standard Faust function. Usage lf_triangle(freq) : _ Where: freq : frequency in Hz Low Frequency Sawtooths Sawtooth waveform oscillators for virtual analog synthesis et al. The 'simple' versions ( lf_rawsaw , lf_sawpos and saw1 ), are mere samplings of the ideal continuous-time (\"analog\") waveforms. While simple, the aliasing due to sampling is quite audible. The differentiated polynomial waveform family ( saw2 , sawN , and derived functions) do some extra processing to suppress aliasing (not audible for very low fundamental frequencies). According to Lehtonen et al. (JASA 2012), the aliasing of saw2 should be inaudible at fundamental frequencies below 2 kHz or so, for a 44.1 kHz sampling rate and 60 dB SPL presentation level; fundamentals 415 and below required no aliasing suppression (i.e., saw1 is ok). (os.)lf_rawsaw Simple sawtooth waveform oscillator between 0 and period in samples. Usage lf_rawsaw(periodsamps) Where: periodsamps : number of periods per samples (os.)lf_sawpos_phase Simple sawtooth waveform oscillator between 0 and 1 with phase control. Usage lf_sawpos_phase(phase,freq) Where: phase : phase freq : frequency (os.)lf_sawpos Simple sawtooth waveform oscillator between 0 and 1. Usage lf_sawpos(freq) Where: freq : frequency (os.)lf_sawpos_reset Simple sawtooth waveform oscillator between 0 and 1. with reset. Usage lf_sawpos_reset(freq,reset) Where: freq : frequency reset : reset the oscillator to 0 (os.)lf_sawpos_phase_reset Simple sawtooth waveform oscillator between 0 and 1. with phase control and reset. Usage lf_sawpos_phase_reset(freq,phase,reset) Where: freq : frequency phase : phase between 0 and 1 reset : reset the oscillator to 0 (os.)lf_saw Simple sawtooth waveform. lf_saw is a standard Faust function. Usage lf_saw(freq) Where: freq : frequency Bandlimited Sawtooth (os.)sawN Bandlimited Sawtooth sawN(N,freq) , sawNp , saw2dpw(freq) , saw2(freq) , saw3(freq) , saw4(freq) , saw5(freq) , saw6(freq) , sawtooth(freq) , saw2f2(freq) saw2f4(freq) Method 1 ( saw2 ) Polynomial Transition Regions (PTR) (for aliasing suppression). References Kleimola, J.; Valimaki, V., \"Reducing Aliasing from Synthetic Audio Signals Using Polynomial Transition Regions,\" in Signal Processing Letters, IEEE , vol.19, no.2, pp.67-70, Feb. 2012 https://aaltodoc.aalto.fi/bitstream/handle/123456789/7747/publication6.pdf?sequence=9 http://research.spa.aalto.fi/publications/papers/spl-ptr/ Method 2 ( sawN ) Differentiated Polynomial Waves (DPW) (for aliasing suppression). Reference \"Alias-Suppressed Oscillators based on Differentiated Polynomial Waveforms\", Vesa Valimaki, Juhan Nam, Julius Smith, and Jonathan Abel, IEEE Tr. Acoustics, Speech, and Language Processing (IEEE-ASLP), Vol. 18, no. 5, May 2010. Other Cases Correction-filtered versions of saw2 : saw2f2 , saw2f4 The correction filter compensates \"droop\" near half the sampling rate. See reference for sawN. Usage sawN(N,freq) : _ sawNp(N,freq,phase) : _ saw2dpw(freq) : _ saw2(freq) : _ saw3(freq) : _ // based on sawN saw4(freq) : _ // based on sawN saw5(freq) : _ // based on sawN saw6(freq) : _ // based on sawN sawtooth(freq) : _ // = saw2 saw2f2(freq) : _ saw2f4(freq) : _ Where: N : polynomial order freq : frequency in Hz phase : phase (os.)sawNp TODO: MarkDown doc in comments (os.)saw2dpw TODO: MarkDown doc in comments (os.)saw3 TODO: MarkDown doc in comments (os.)sawtooth Alias-free sawtooth wave. 2nd order interpolation (based on saw2 ). sawtooth is a standard Faust function. Usage sawtooth(freq) : _ Where: freq : frequency (os.)saw2f2 TODO: MarkDown doc in comments (os.)saw2f4 TODO: MarkDown doc in comments Bandlimited Pulse, Square, and Impulse Trains Bandlimited Pulse, Square, and Impulse Trains. pulsetrainN , pulsetrain , squareN , square , imptrain , imptrainN , triangle , triangleN All are zero-mean and meant to oscillate in the audio frequency range. Use simpler sample-rounded lf_* versions above for LFOs. Usage pulsetrainN(N,freq,duty) : _ pulsetrain(freq, duty) : _ // = pulsetrainN(2) squareN(N, freq) : _ square : _ // = squareN(2) imptrainN(N,freq) : _ imptrain : _ // = imptrainN(2) triangleN(N,freq) : _ triangle : _ // = triangleN(2) Where: N : polynomial order freq : frequency in Hz (os.)pulsetrainN TODO: MarkDown doc in comments (os.)pulsetrain Bandlimited pulse train oscillator. Based on pulsetrainN(2) . pulsetrain is a standard Faust function. Usage pulsetrain(freq, duty) : _ Where: freq : frequency duty : duty cycle between 0 and 1 (os.)squareN TODO: MarkDown doc in comments (os.)square Bandlimited square wave oscillator. Based on squareN(2) . square is a standard Faust function. Usage square(freq) : _ Where: freq : frequency (os.)impulse One-time impulse generated when the Faust process is started. impulse is a standard Faust function. Usage impulse : _ (os.)imptrainN TODO: MarkDown doc in comments (os.)imptrain Bandlimited impulse train generator. Based on imptrainN(2) . imptrain is a standard Faust function. Usage imptrain(freq) : _ Where: freq : frequency (os.)triangleN TODO: MarkDown doc in comments (os.)triangle Bandlimited triangle wave oscillator. Based on triangleN(2) . triangle is a standard Faust function. Usage triangle(freq) : _ Where: freq : frequency Filter-Based Oscillators Filter-Based Oscillators Usage osc[b|r|rs|rc|s|w](f), where f = frequency in Hz. References http://lac.linuxaudio.org/2012/download/lac12-slides-jos.pdf https://ccrma.stanford.edu/~jos/pdf/lac12-paper-jos.pdf (os.)oscb Sinusoidal oscillator based on the biquad. Usage oscb(freq) : _ Where: freq : frequency (os.)oscrq Sinusoidal (sine and cosine) oscillator based on 2D vector rotation, = undamped \"coupled-form\" resonator = lossless 2nd-order normalized ladder filter. Usage oscrq(freq) : _,_ Where: freq : frequency Reference https://ccrma.stanford.edu/~jos/pasp/Normalized_Scattering_Junctions.html (os.)oscrs Sinusoidal (sine) oscillator based on 2D vector rotation, = undamped \"coupled-form\" resonator = lossless 2nd-order normalized ladder filter. Usage oscrs(freq) : _ Where: freq : frequency Reference https://ccrma.stanford.edu/~jos/pasp/Normalized_Scattering_Junctions.html (os.)oscrc Sinusoidal (cosine) oscillator based on 2D vector rotation, = undamped \"coupled-form\" resonator = lossless 2nd-order normalized ladder filter. Usage oscrc(freq) : _ Where: freq : frequency Reference https://ccrma.stanford.edu/~jos/pasp/Normalized_Scattering_Junctions.html (os.)oscs Sinusoidal oscillator based on the state variable filter = undamped \"modified-coupled-form\" resonator = \"magic circle\" algorithm used in graphics. (os.)osc Default sine wave oscillator (same as oscsin ). osc is a standard Faust function. Usage osc(freq) : _ Where: freq : the frequency of the wave (Hz) Waveguide-Resonator-Based Oscillators Sinusoidal oscillator based on the waveguide resonator wgr . (os.)oscw Sinusoidal oscillator based on the waveguide resonator wgr . Unit-amplitude cosine oscillator. Usage oscwc(freq) : _ Where: freq : frequency Reference https://ccrma.stanford.edu/~jos/pasp/Digital_Waveguide_Oscillator.html (os.)oscws Sinusoidal oscillator based on the waveguide resonator wgr . Unit-amplitude sine oscillator. Usage oscws(freq) : _ Where: freq : frequency Reference https://ccrma.stanford.edu/~jos/pasp/Digital_Waveguide_Oscillator.html (os.)oscwq Sinusoidal oscillator based on the waveguide resonator wgr . Unit-amplitude cosine and sine (quadrature) oscillator. Usage oscwq(freq) : _ Where: freq : frequency Reference https://ccrma.stanford.edu/~jos/pasp/Digital_Waveguide_Oscillator.html (os.)oscw Sinusoidal oscillator based on the waveguide resonator wgr . Unit-amplitude cosine oscillator (default). Usage oscw(freq) : _ Where: freq : frequency Reference https://ccrma.stanford.edu/~jos/pasp/Digital_Waveguide_Oscillator.html Casio CZ Oscillators Oscillators that mimic some of the Casio CZ oscillators. There are two sets: - A set with an index parameter - A set with a res parameter The \"index oscillators\" outputs a sine wave at index=0 and gets brighter with a higher index. There are two versions of the \"index oscillators\": - with P appended to the name: is phase aligned with 'fund:sin' - without P appended to the name: has the phase of the original CZ oscillators The \"res oscillators\" have a resonant frequency. \"res\" is the frequency of resonance as a factor of the fundamental pitch. (os.)CZsaw Oscillator that mimics the Casio CZ saw oscillator CZsaw is a standard Faust function. Usage CZsaw(fund,index) : _ Where: fund : a saw-tooth waveform between 0 and 1 that the oscillator slaves to index : the brightness of the oscillator, 0 to 1. 0 = sine-wave, 1 = saw-wave (os.)CZsawP Oscillator that mimics the Casio CZ saw oscillator, with it's phase aligned to fund:sin . CZsawP is a standard Faust function. Usage CZsawP(fund,index) : _ Where: fund : a saw-tooth waveform between 0 and 1 that the oscillator slaves to index : the brightness of the oscillator, 0 to 1. 0 = sine-wave, 1 = saw-wave (os.)CZsquare Oscillator that mimics the Casio CZ square oscillator CZsquare is a standard Faust function. Usage CZsquare(fund,index) : _ Where: fund : a saw-tooth waveform between 0 and 1 that the oscillator slaves to index : the brightness of the oscillator, 0 to 1. 0 = sine-wave, 1 = square-wave (os.)CZsquareP Oscillator that mimics the Casio CZ square oscillator, with it's phase aligned to fund:sin . CZsquareP is a standard Faust function. Usage CZsquareP(fund,index) : _ Where: fund : a saw-tooth waveform between 0 and 1 that the oscillator slaves to index : the brightness of the oscillator, 0 to 1. 0 = sine-wave, 1 = square-wave (os.)CZpulse Oscillator that mimics the Casio CZ pulse oscillator CZpulse is a standard Faust function. Usage CZpulse(fund,index) : _ Where: fund : a saw-tooth waveform between 0 and 1 that the oscillator slaves to index : the brightness of the oscillator, 0 gives a sine-wave, 1 is closer to a pulse (os.)CZpulseP Oscillator that mimics the Casio CZ pulse oscillator, with it's phase aligned to fund:sin . CZpulseP is a standard Faust function. Usage CZpulseP(fund,index) : _ Where: fund : a saw-tooth waveform between 0 and 1 that the oscillator slaves to index : the brightness of the oscillator, 0 gives a sine-wave, 1 is closer to a pulse (os.)CZsinePulse Oscillator that mimics the Casio CZ sine/pulse oscillator CZsinePulse is a standard Faust function. Usage CZsinePulse(fund,index) : _ Where: fund : a saw-tooth waveform between 0 and 1 that the oscillator slaves to index : the brightness of the oscillator, 0 gives a sine-wave, 1 is a sine minus a pulse (os.)CZsinePulseP Oscillator that mimics the Casio CZ sine/pulse oscillator, with it's phase aligned to fund:sin . CZsinePulseP is a standard Faust function. Usage CZsinePulseP(fund,index) : _ Where: fund : a saw-tooth waveform between 0 and 1 that the oscillator slaves to index : the brightness of the oscillator, 0 gives a sine-wave, 1 is a sine minus a pulse (os.)CZhalfSine Oscillator that mimics the Casio CZ half sine oscillator CZhalfSine is a standard Faust function. Usage CZhalfSine(fund,index) : _ Where: fund : a saw-tooth waveform between 0 and 1 that the oscillator slaves to index : the brightness of the oscillator, 0 gives a sine-wave, 1 is somewhere between a saw and a square (os.)CZhalfSineP Oscillator that mimics the Casio CZ half sine oscillator, with it's phase aligned to fund:sin . CZhalfSineP is a standard Faust function. Usage CZhalfSineP(fund,index) : _ Where: fund : a saw-tooth waveform between 0 and 1 that the oscillator slaves to index : the brightness of the oscillator, 0 gives a sine-wave, 1 is somewhere between a saw and a square (os.)CZresSaw Oscillator that mimics the Casio CZ resonant saw-tooth oscillator CZresSaw is a standard Faust function. Usage CZresSaw(fund,res) : _ Where: fund : a saw-tooth waveform between 0 and 1 that the oscillator slaves to res : the frequency of resonance as a factor of the fundamental pitch. (os.)CZresTriangle Oscillator that mimics the Casio CZ resonant triangle oscillator CZresTriangle is a standard Faust function. Usage CZresTriangle(fund,res) : _ Where: fund : a saw-tooth waveform between 0 and 1 that the oscillator slaves to res : the frequency of resonance as a factor of the fundamental pitch. (os.)CZresTrap Oscillator that mimics the Casio CZ resonant trapeze oscillator CZresTrap is a standard Faust function. Usage CZresTrap(fund,res) : _ Where: fund : a saw-tooth waveform between 0 and 1 that the oscillator slaves to res : the frequency of resonance as a factor of the fundamental pitch. PolyBLEP-Based Oscillators (os.)polyblep PolyBLEP residual function - used for smoothing steps in the audio signal. Usage polyblep(Q, phase) : _ Where: Q : smoothing factor between 0 and 0.5. Determines how far from the ends of the phase interval the quadratic function is used. phase : normalised phase (between 0 and 1) (os.)polyblep_saw Sawtooth oscillator with suppressed aliasing (using polyBLEP). Usage polyblep_saw(f) : _ Where: f : frequency in Hz (os.)polyblep_square Square wave oscillator with suppressed aliasing (using polyBLEP). Usage polyblep_square(f) : _ Where: f : frequency in Hz (os.)polyblep_triangle Triangle wave oscillator with suppressed aliasing (using polyBLEP). Usage polyblep_triangle(f) : _ Where: f : frequency in Hz Filter-Based Oscillators (os.)quadosc Sinusoidal oscillator based on QuadOsc by Martin Vicanek. Usage quadosc(freq) : _ where freq : frequency in Hz Reference https://vicanek.de/articles/QuadOsc.pdf","title":" oscillators "},{"location":"libs/oscillators/#oscillatorslib","text":"This library contains a collection of sound generators. Its official prefix is os .","title":"oscillators.lib"},{"location":"libs/oscillators/#wave-table-based-oscillators","text":"","title":"Wave-Table-Based Oscillators"},{"location":"libs/oscillators/#ossinwaveform","text":"Sine waveform ready to use with a rdtable .","title":"(os.)sinwaveform"},{"location":"libs/oscillators/#usage","text":"sinwaveform(tablesize) : _ Where: tablesize : the table size","title":"Usage"},{"location":"libs/oscillators/#oscoswaveform","text":"Cosine waveform ready to use with a rdtable .","title":"(os.)coswaveform"},{"location":"libs/oscillators/#usage_1","text":"coswaveform(tablesize) : _ Where: tablesize : the table size","title":"Usage"},{"location":"libs/oscillators/#osphasor","text":"A simple phasor to be used with a rdtable . phasor is a standard Faust function.","title":"(os.)phasor"},{"location":"libs/oscillators/#usage_2","text":"phasor(tablesize,freq) : _ Where: tablesize : the table size freq : the frequency of the phasor (Hz)","title":"Usage"},{"location":"libs/oscillators/#oshs_phasor","text":"Hardsyncing phasor to be used with an rdtable .","title":"(os.)hs_phasor"},{"location":"libs/oscillators/#usage_3","text":"hs_phasor(tablesize,freq,c) : _ Where: tablesize : the table size freq : the frequency of the phasor (Hz) c : a clock signal, c>0 resets phase to 0","title":"Usage"},{"location":"libs/oscillators/#oshsp_phasor","text":"Hardsyncing phasor with selectable phase to be used with an rdtable .","title":"(os.)hsp_phasor"},{"location":"libs/oscillators/#usage_4","text":"hsp_phasor(tablesize,freq,p,c) Where: tablesize : the table size freq : the frequency of the phasor (Hz) p : phase init (0 <= p <=1) c : a clock signal, c>0 resets phase to 0","title":"Usage"},{"location":"libs/oscillators/#ososcsin","text":"Sine wave oscillator. oscsin is a standard Faust function.","title":"(os.)oscsin"},{"location":"libs/oscillators/#usage_5","text":"oscsin(freq) : _ Where: freq : the frequency of the wave (Hz)","title":"Usage"},{"location":"libs/oscillators/#oshs_oscsin","text":"Sin lookup table with hardsyncing phase.","title":"(os.)hs_oscsin"},{"location":"libs/oscillators/#usage_6","text":"hs_oscsin(freq,c) : _ Where: freq : the fundamental frequency of the phasor c : a clock signal, c>0 resets phase to 0","title":"Usage"},{"location":"libs/oscillators/#ososccos","text":"Cosine wave oscillator.","title":"(os.)osccos"},{"location":"libs/oscillators/#usage_7","text":"osccos(freq) : _ Where: freq : the frequency of the wave (Hz)","title":"Usage"},{"location":"libs/oscillators/#ososcp","text":"A sine wave generator with controllable phase.","title":"(os.)oscp"},{"location":"libs/oscillators/#usage_8","text":"oscp(freq,phase) : _ Where: freq : the frequency of the wave (Hz) phase : the phase in radian","title":"Usage"},{"location":"libs/oscillators/#ososci","text":"Interpolated phase sine wave oscillator.","title":"(os.)osci"},{"location":"libs/oscillators/#usage_9","text":"osci(freq) : _ Where: freq : the frequency of the wave (Hz)","title":"Usage"},{"location":"libs/oscillators/#lfos","text":"Low-Frequency Oscillators (LFOs) have prefix lf_ (no aliasing suppression, which is not audible at LF).","title":"LFOs"},{"location":"libs/oscillators/#oslf_imptrain","text":"Unit-amplitude low-frequency impulse train. lf_imptrain is a standard Faust function.","title":"(os.)lf_imptrain"},{"location":"libs/oscillators/#usage_10","text":"lf_imptrain(freq) : _ Where: freq : frequency in Hz","title":"Usage"},{"location":"libs/oscillators/#oslf_pulsetrainpos","text":"Unit-amplitude nonnegative LF pulse train, duty cycle between 0 and 1.","title":"(os.)lf_pulsetrainpos"},{"location":"libs/oscillators/#usage_11","text":"lf_pulsetrainpos(freq,duty) : _ Where: freq : frequency in Hz duty : duty cycle between 0 and 1","title":"Usage"},{"location":"libs/oscillators/#oslf_pulsetrain","text":"Unit-amplitude zero-mean LF pulse train, duty cycle between 0 and 1.","title":"(os.)lf_pulsetrain"},{"location":"libs/oscillators/#usage_12","text":"lf_pulsetrain(freq,duty) : _ Where: freq : frequency in Hz duty : duty cycle between 0 and 1","title":"Usage"},{"location":"libs/oscillators/#oslf_squarewavepos","text":"Positive LF square wave in [0,1]","title":"(os.)lf_squarewavepos"},{"location":"libs/oscillators/#usage_13","text":"lf_squarewavepos(freq) : _ Where: freq : frequency in Hz","title":"Usage"},{"location":"libs/oscillators/#oslf_squarewave","text":"Zero-mean unit-amplitude LF square wave. lf_squarewave is a standard Faust function.","title":"(os.)lf_squarewave"},{"location":"libs/oscillators/#usage_14","text":"lf_squarewave(freq) : _ Where: freq : frequency in Hz","title":"Usage"},{"location":"libs/oscillators/#oslf_trianglepos","text":"Positive unit-amplitude LF positive triangle wave.","title":"(os.)lf_trianglepos"},{"location":"libs/oscillators/#usage_15","text":"lf_trianglepos(freq) : _ Where: freq : frequency in Hz","title":"Usage"},{"location":"libs/oscillators/#oslf_triangle","text":"Positive unit-amplitude LF triangle wave lf_triangle is a standard Faust function.","title":"(os.)lf_triangle"},{"location":"libs/oscillators/#usage_16","text":"lf_triangle(freq) : _ Where: freq : frequency in Hz","title":"Usage"},{"location":"libs/oscillators/#low-frequency-sawtooths","text":"Sawtooth waveform oscillators for virtual analog synthesis et al. The 'simple' versions ( lf_rawsaw , lf_sawpos and saw1 ), are mere samplings of the ideal continuous-time (\"analog\") waveforms. While simple, the aliasing due to sampling is quite audible. The differentiated polynomial waveform family ( saw2 , sawN , and derived functions) do some extra processing to suppress aliasing (not audible for very low fundamental frequencies). According to Lehtonen et al. (JASA 2012), the aliasing of saw2 should be inaudible at fundamental frequencies below 2 kHz or so, for a 44.1 kHz sampling rate and 60 dB SPL presentation level; fundamentals 415 and below required no aliasing suppression (i.e., saw1 is ok).","title":"Low Frequency Sawtooths"},{"location":"libs/oscillators/#oslf_rawsaw","text":"Simple sawtooth waveform oscillator between 0 and period in samples.","title":"(os.)lf_rawsaw"},{"location":"libs/oscillators/#usage_17","text":"lf_rawsaw(periodsamps) Where: periodsamps : number of periods per samples","title":"Usage"},{"location":"libs/oscillators/#oslf_sawpos_phase","text":"Simple sawtooth waveform oscillator between 0 and 1 with phase control.","title":"(os.)lf_sawpos_phase"},{"location":"libs/oscillators/#usage_18","text":"lf_sawpos_phase(phase,freq) Where: phase : phase freq : frequency","title":"Usage"},{"location":"libs/oscillators/#oslf_sawpos","text":"Simple sawtooth waveform oscillator between 0 and 1.","title":"(os.)lf_sawpos"},{"location":"libs/oscillators/#usage_19","text":"lf_sawpos(freq) Where: freq : frequency","title":"Usage"},{"location":"libs/oscillators/#oslf_sawpos_reset","text":"Simple sawtooth waveform oscillator between 0 and 1. with reset.","title":"(os.)lf_sawpos_reset"},{"location":"libs/oscillators/#usage_20","text":"lf_sawpos_reset(freq,reset) Where: freq : frequency reset : reset the oscillator to 0","title":"Usage"},{"location":"libs/oscillators/#oslf_sawpos_phase_reset","text":"Simple sawtooth waveform oscillator between 0 and 1. with phase control and reset.","title":"(os.)lf_sawpos_phase_reset"},{"location":"libs/oscillators/#usage_21","text":"lf_sawpos_phase_reset(freq,phase,reset) Where: freq : frequency phase : phase between 0 and 1 reset : reset the oscillator to 0","title":"Usage"},{"location":"libs/oscillators/#oslf_saw","text":"Simple sawtooth waveform. lf_saw is a standard Faust function.","title":"(os.)lf_saw"},{"location":"libs/oscillators/#usage_22","text":"lf_saw(freq) Where: freq : frequency","title":"Usage"},{"location":"libs/oscillators/#bandlimited-sawtooth","text":"","title":"Bandlimited Sawtooth"},{"location":"libs/oscillators/#ossawn","text":"Bandlimited Sawtooth sawN(N,freq) , sawNp , saw2dpw(freq) , saw2(freq) , saw3(freq) , saw4(freq) , saw5(freq) , saw6(freq) , sawtooth(freq) , saw2f2(freq) saw2f4(freq)","title":"(os.)sawN"},{"location":"libs/oscillators/#method-1-saw2","text":"Polynomial Transition Regions (PTR) (for aliasing suppression).","title":"Method 1 (saw2)"},{"location":"libs/oscillators/#references","text":"Kleimola, J.; Valimaki, V., \"Reducing Aliasing from Synthetic Audio Signals Using Polynomial Transition Regions,\" in Signal Processing Letters, IEEE , vol.19, no.2, pp.67-70, Feb. 2012 https://aaltodoc.aalto.fi/bitstream/handle/123456789/7747/publication6.pdf?sequence=9 http://research.spa.aalto.fi/publications/papers/spl-ptr/","title":"References"},{"location":"libs/oscillators/#method-2-sawn","text":"Differentiated Polynomial Waves (DPW) (for aliasing suppression).","title":"Method 2 (sawN)"},{"location":"libs/oscillators/#reference","text":"\"Alias-Suppressed Oscillators based on Differentiated Polynomial Waveforms\", Vesa Valimaki, Juhan Nam, Julius Smith, and Jonathan Abel, IEEE Tr. Acoustics, Speech, and Language Processing (IEEE-ASLP), Vol. 18, no. 5, May 2010.","title":"Reference"},{"location":"libs/oscillators/#other-cases","text":"Correction-filtered versions of saw2 : saw2f2 , saw2f4 The correction filter compensates \"droop\" near half the sampling rate. See reference for sawN.","title":"Other Cases"},{"location":"libs/oscillators/#usage_23","text":"sawN(N,freq) : _ sawNp(N,freq,phase) : _ saw2dpw(freq) : _ saw2(freq) : _ saw3(freq) : _ // based on sawN saw4(freq) : _ // based on sawN saw5(freq) : _ // based on sawN saw6(freq) : _ // based on sawN sawtooth(freq) : _ // = saw2 saw2f2(freq) : _ saw2f4(freq) : _ Where: N : polynomial order freq : frequency in Hz phase : phase","title":"Usage"},{"location":"libs/oscillators/#ossawnp","text":"TODO: MarkDown doc in comments","title":"(os.)sawNp"},{"location":"libs/oscillators/#ossaw2dpw","text":"TODO: MarkDown doc in comments","title":"(os.)saw2dpw"},{"location":"libs/oscillators/#ossaw3","text":"TODO: MarkDown doc in comments","title":"(os.)saw3"},{"location":"libs/oscillators/#ossawtooth","text":"Alias-free sawtooth wave. 2nd order interpolation (based on saw2 ). sawtooth is a standard Faust function.","title":"(os.)sawtooth"},{"location":"libs/oscillators/#usage_24","text":"sawtooth(freq) : _ Where: freq : frequency","title":"Usage"},{"location":"libs/oscillators/#ossaw2f2","text":"TODO: MarkDown doc in comments","title":"(os.)saw2f2"},{"location":"libs/oscillators/#ossaw2f4","text":"TODO: MarkDown doc in comments","title":"(os.)saw2f4"},{"location":"libs/oscillators/#bandlimited-pulse-square-and-impulse-trains","text":"Bandlimited Pulse, Square, and Impulse Trains. pulsetrainN , pulsetrain , squareN , square , imptrain , imptrainN , triangle , triangleN All are zero-mean and meant to oscillate in the audio frequency range. Use simpler sample-rounded lf_* versions above for LFOs.","title":"Bandlimited Pulse, Square, and Impulse Trains"},{"location":"libs/oscillators/#usage_25","text":"pulsetrainN(N,freq,duty) : _ pulsetrain(freq, duty) : _ // = pulsetrainN(2) squareN(N, freq) : _ square : _ // = squareN(2) imptrainN(N,freq) : _ imptrain : _ // = imptrainN(2) triangleN(N,freq) : _ triangle : _ // = triangleN(2) Where: N : polynomial order freq : frequency in Hz","title":"Usage"},{"location":"libs/oscillators/#ospulsetrainn","text":"TODO: MarkDown doc in comments","title":"(os.)pulsetrainN"},{"location":"libs/oscillators/#ospulsetrain","text":"Bandlimited pulse train oscillator. Based on pulsetrainN(2) . pulsetrain is a standard Faust function.","title":"(os.)pulsetrain"},{"location":"libs/oscillators/#usage_26","text":"pulsetrain(freq, duty) : _ Where: freq : frequency duty : duty cycle between 0 and 1","title":"Usage"},{"location":"libs/oscillators/#ossquaren","text":"TODO: MarkDown doc in comments","title":"(os.)squareN"},{"location":"libs/oscillators/#ossquare","text":"Bandlimited square wave oscillator. Based on squareN(2) . square is a standard Faust function.","title":"(os.)square"},{"location":"libs/oscillators/#usage_27","text":"square(freq) : _ Where: freq : frequency","title":"Usage"},{"location":"libs/oscillators/#osimpulse","text":"One-time impulse generated when the Faust process is started. impulse is a standard Faust function.","title":"(os.)impulse"},{"location":"libs/oscillators/#usage_28","text":"impulse : _","title":"Usage"},{"location":"libs/oscillators/#osimptrainn","text":"TODO: MarkDown doc in comments","title":"(os.)imptrainN"},{"location":"libs/oscillators/#osimptrain","text":"Bandlimited impulse train generator. Based on imptrainN(2) . imptrain is a standard Faust function.","title":"(os.)imptrain"},{"location":"libs/oscillators/#usage_29","text":"imptrain(freq) : _ Where: freq : frequency","title":"Usage"},{"location":"libs/oscillators/#ostrianglen","text":"TODO: MarkDown doc in comments","title":"(os.)triangleN"},{"location":"libs/oscillators/#ostriangle","text":"Bandlimited triangle wave oscillator. Based on triangleN(2) . triangle is a standard Faust function.","title":"(os.)triangle"},{"location":"libs/oscillators/#usage_30","text":"triangle(freq) : _ Where: freq : frequency","title":"Usage"},{"location":"libs/oscillators/#filter-based-oscillators","text":"Filter-Based Oscillators","title":"Filter-Based Oscillators"},{"location":"libs/oscillators/#usage_31","text":"osc[b|r|rs|rc|s|w](f), where f = frequency in Hz.","title":"Usage"},{"location":"libs/oscillators/#references_1","text":"http://lac.linuxaudio.org/2012/download/lac12-slides-jos.pdf https://ccrma.stanford.edu/~jos/pdf/lac12-paper-jos.pdf","title":"References"},{"location":"libs/oscillators/#ososcb","text":"Sinusoidal oscillator based on the biquad.","title":"(os.)oscb"},{"location":"libs/oscillators/#usage_32","text":"oscb(freq) : _ Where: freq : frequency","title":"Usage"},{"location":"libs/oscillators/#ososcrq","text":"Sinusoidal (sine and cosine) oscillator based on 2D vector rotation, = undamped \"coupled-form\" resonator = lossless 2nd-order normalized ladder filter.","title":"(os.)oscrq"},{"location":"libs/oscillators/#usage_33","text":"oscrq(freq) : _,_ Where: freq : frequency","title":"Usage"},{"location":"libs/oscillators/#reference_1","text":"https://ccrma.stanford.edu/~jos/pasp/Normalized_Scattering_Junctions.html","title":"Reference"},{"location":"libs/oscillators/#ososcrs","text":"Sinusoidal (sine) oscillator based on 2D vector rotation, = undamped \"coupled-form\" resonator = lossless 2nd-order normalized ladder filter.","title":"(os.)oscrs"},{"location":"libs/oscillators/#usage_34","text":"oscrs(freq) : _ Where: freq : frequency","title":"Usage"},{"location":"libs/oscillators/#reference_2","text":"https://ccrma.stanford.edu/~jos/pasp/Normalized_Scattering_Junctions.html","title":"Reference"},{"location":"libs/oscillators/#ososcrc","text":"Sinusoidal (cosine) oscillator based on 2D vector rotation, = undamped \"coupled-form\" resonator = lossless 2nd-order normalized ladder filter.","title":"(os.)oscrc"},{"location":"libs/oscillators/#usage_35","text":"oscrc(freq) : _ Where: freq : frequency","title":"Usage"},{"location":"libs/oscillators/#reference_3","text":"https://ccrma.stanford.edu/~jos/pasp/Normalized_Scattering_Junctions.html","title":"Reference"},{"location":"libs/oscillators/#ososcs","text":"Sinusoidal oscillator based on the state variable filter = undamped \"modified-coupled-form\" resonator = \"magic circle\" algorithm used in graphics.","title":"(os.)oscs"},{"location":"libs/oscillators/#ososc","text":"Default sine wave oscillator (same as oscsin ). osc is a standard Faust function.","title":"(os.)osc"},{"location":"libs/oscillators/#usage_36","text":"osc(freq) : _ Where: freq : the frequency of the wave (Hz)","title":"Usage"},{"location":"libs/oscillators/#waveguide-resonator-based-oscillators","text":"Sinusoidal oscillator based on the waveguide resonator wgr .","title":"Waveguide-Resonator-Based Oscillators"},{"location":"libs/oscillators/#ososcw","text":"Sinusoidal oscillator based on the waveguide resonator wgr . Unit-amplitude cosine oscillator.","title":"(os.)oscw"},{"location":"libs/oscillators/#usage_37","text":"oscwc(freq) : _ Where: freq : frequency","title":"Usage"},{"location":"libs/oscillators/#reference_4","text":"https://ccrma.stanford.edu/~jos/pasp/Digital_Waveguide_Oscillator.html","title":"Reference"},{"location":"libs/oscillators/#ososcws","text":"Sinusoidal oscillator based on the waveguide resonator wgr . Unit-amplitude sine oscillator.","title":"(os.)oscws"},{"location":"libs/oscillators/#usage_38","text":"oscws(freq) : _ Where: freq : frequency","title":"Usage"},{"location":"libs/oscillators/#reference_5","text":"https://ccrma.stanford.edu/~jos/pasp/Digital_Waveguide_Oscillator.html","title":"Reference"},{"location":"libs/oscillators/#ososcwq","text":"Sinusoidal oscillator based on the waveguide resonator wgr . Unit-amplitude cosine and sine (quadrature) oscillator.","title":"(os.)oscwq"},{"location":"libs/oscillators/#usage_39","text":"oscwq(freq) : _ Where: freq : frequency","title":"Usage"},{"location":"libs/oscillators/#reference_6","text":"https://ccrma.stanford.edu/~jos/pasp/Digital_Waveguide_Oscillator.html","title":"Reference"},{"location":"libs/oscillators/#ososcw_1","text":"Sinusoidal oscillator based on the waveguide resonator wgr . Unit-amplitude cosine oscillator (default).","title":"(os.)oscw"},{"location":"libs/oscillators/#usage_40","text":"oscw(freq) : _ Where: freq : frequency","title":"Usage"},{"location":"libs/oscillators/#reference_7","text":"https://ccrma.stanford.edu/~jos/pasp/Digital_Waveguide_Oscillator.html","title":"Reference"},{"location":"libs/oscillators/#casio-cz-oscillators","text":"Oscillators that mimic some of the Casio CZ oscillators. There are two sets: - A set with an index parameter - A set with a res parameter The \"index oscillators\" outputs a sine wave at index=0 and gets brighter with a higher index. There are two versions of the \"index oscillators\": - with P appended to the name: is phase aligned with 'fund:sin' - without P appended to the name: has the phase of the original CZ oscillators The \"res oscillators\" have a resonant frequency. \"res\" is the frequency of resonance as a factor of the fundamental pitch.","title":"Casio CZ Oscillators"},{"location":"libs/oscillators/#osczsaw","text":"Oscillator that mimics the Casio CZ saw oscillator CZsaw is a standard Faust function.","title":"(os.)CZsaw"},{"location":"libs/oscillators/#usage_41","text":"CZsaw(fund,index) : _ Where: fund : a saw-tooth waveform between 0 and 1 that the oscillator slaves to index : the brightness of the oscillator, 0 to 1. 0 = sine-wave, 1 = saw-wave","title":"Usage"},{"location":"libs/oscillators/#osczsawp","text":"Oscillator that mimics the Casio CZ saw oscillator, with it's phase aligned to fund:sin . CZsawP is a standard Faust function.","title":"(os.)CZsawP"},{"location":"libs/oscillators/#usage_42","text":"CZsawP(fund,index) : _ Where: fund : a saw-tooth waveform between 0 and 1 that the oscillator slaves to index : the brightness of the oscillator, 0 to 1. 0 = sine-wave, 1 = saw-wave","title":"Usage"},{"location":"libs/oscillators/#osczsquare","text":"Oscillator that mimics the Casio CZ square oscillator CZsquare is a standard Faust function.","title":"(os.)CZsquare"},{"location":"libs/oscillators/#usage_43","text":"CZsquare(fund,index) : _ Where: fund : a saw-tooth waveform between 0 and 1 that the oscillator slaves to index : the brightness of the oscillator, 0 to 1. 0 = sine-wave, 1 = square-wave","title":"Usage"},{"location":"libs/oscillators/#osczsquarep","text":"Oscillator that mimics the Casio CZ square oscillator, with it's phase aligned to fund:sin . CZsquareP is a standard Faust function.","title":"(os.)CZsquareP"},{"location":"libs/oscillators/#usage_44","text":"CZsquareP(fund,index) : _ Where: fund : a saw-tooth waveform between 0 and 1 that the oscillator slaves to index : the brightness of the oscillator, 0 to 1. 0 = sine-wave, 1 = square-wave","title":"Usage"},{"location":"libs/oscillators/#osczpulse","text":"Oscillator that mimics the Casio CZ pulse oscillator CZpulse is a standard Faust function.","title":"(os.)CZpulse"},{"location":"libs/oscillators/#usage_45","text":"CZpulse(fund,index) : _ Where: fund : a saw-tooth waveform between 0 and 1 that the oscillator slaves to index : the brightness of the oscillator, 0 gives a sine-wave, 1 is closer to a pulse","title":"Usage"},{"location":"libs/oscillators/#osczpulsep","text":"Oscillator that mimics the Casio CZ pulse oscillator, with it's phase aligned to fund:sin . CZpulseP is a standard Faust function.","title":"(os.)CZpulseP"},{"location":"libs/oscillators/#usage_46","text":"CZpulseP(fund,index) : _ Where: fund : a saw-tooth waveform between 0 and 1 that the oscillator slaves to index : the brightness of the oscillator, 0 gives a sine-wave, 1 is closer to a pulse","title":"Usage"},{"location":"libs/oscillators/#osczsinepulse","text":"Oscillator that mimics the Casio CZ sine/pulse oscillator CZsinePulse is a standard Faust function.","title":"(os.)CZsinePulse"},{"location":"libs/oscillators/#usage_47","text":"CZsinePulse(fund,index) : _ Where: fund : a saw-tooth waveform between 0 and 1 that the oscillator slaves to index : the brightness of the oscillator, 0 gives a sine-wave, 1 is a sine minus a pulse","title":"Usage"},{"location":"libs/oscillators/#osczsinepulsep","text":"Oscillator that mimics the Casio CZ sine/pulse oscillator, with it's phase aligned to fund:sin . CZsinePulseP is a standard Faust function.","title":"(os.)CZsinePulseP"},{"location":"libs/oscillators/#usage_48","text":"CZsinePulseP(fund,index) : _ Where: fund : a saw-tooth waveform between 0 and 1 that the oscillator slaves to index : the brightness of the oscillator, 0 gives a sine-wave, 1 is a sine minus a pulse","title":"Usage"},{"location":"libs/oscillators/#osczhalfsine","text":"Oscillator that mimics the Casio CZ half sine oscillator CZhalfSine is a standard Faust function.","title":"(os.)CZhalfSine"},{"location":"libs/oscillators/#usage_49","text":"CZhalfSine(fund,index) : _ Where: fund : a saw-tooth waveform between 0 and 1 that the oscillator slaves to index : the brightness of the oscillator, 0 gives a sine-wave, 1 is somewhere between a saw and a square","title":"Usage"},{"location":"libs/oscillators/#osczhalfsinep","text":"Oscillator that mimics the Casio CZ half sine oscillator, with it's phase aligned to fund:sin . CZhalfSineP is a standard Faust function.","title":"(os.)CZhalfSineP"},{"location":"libs/oscillators/#usage_50","text":"CZhalfSineP(fund,index) : _ Where: fund : a saw-tooth waveform between 0 and 1 that the oscillator slaves to index : the brightness of the oscillator, 0 gives a sine-wave, 1 is somewhere between a saw and a square","title":"Usage"},{"location":"libs/oscillators/#osczressaw","text":"Oscillator that mimics the Casio CZ resonant saw-tooth oscillator CZresSaw is a standard Faust function.","title":"(os.)CZresSaw"},{"location":"libs/oscillators/#usage_51","text":"CZresSaw(fund,res) : _ Where: fund : a saw-tooth waveform between 0 and 1 that the oscillator slaves to res : the frequency of resonance as a factor of the fundamental pitch.","title":"Usage"},{"location":"libs/oscillators/#osczrestriangle","text":"Oscillator that mimics the Casio CZ resonant triangle oscillator CZresTriangle is a standard Faust function.","title":"(os.)CZresTriangle"},{"location":"libs/oscillators/#usage_52","text":"CZresTriangle(fund,res) : _ Where: fund : a saw-tooth waveform between 0 and 1 that the oscillator slaves to res : the frequency of resonance as a factor of the fundamental pitch.","title":"Usage"},{"location":"libs/oscillators/#osczrestrap","text":"Oscillator that mimics the Casio CZ resonant trapeze oscillator CZresTrap is a standard Faust function.","title":"(os.)CZresTrap"},{"location":"libs/oscillators/#usage_53","text":"CZresTrap(fund,res) : _ Where: fund : a saw-tooth waveform between 0 and 1 that the oscillator slaves to res : the frequency of resonance as a factor of the fundamental pitch.","title":"Usage"},{"location":"libs/oscillators/#polyblep-based-oscillators","text":"","title":"PolyBLEP-Based Oscillators"},{"location":"libs/oscillators/#ospolyblep","text":"PolyBLEP residual function - used for smoothing steps in the audio signal.","title":"(os.)polyblep"},{"location":"libs/oscillators/#usage_54","text":"polyblep(Q, phase) : _ Where: Q : smoothing factor between 0 and 0.5. Determines how far from the ends of the phase interval the quadratic function is used. phase : normalised phase (between 0 and 1)","title":"Usage"},{"location":"libs/oscillators/#ospolyblep_saw","text":"Sawtooth oscillator with suppressed aliasing (using polyBLEP).","title":"(os.)polyblep_saw"},{"location":"libs/oscillators/#usage_55","text":"polyblep_saw(f) : _ Where: f : frequency in Hz","title":"Usage"},{"location":"libs/oscillators/#ospolyblep_square","text":"Square wave oscillator with suppressed aliasing (using polyBLEP).","title":"(os.)polyblep_square"},{"location":"libs/oscillators/#usage_56","text":"polyblep_square(f) : _ Where: f : frequency in Hz","title":"Usage"},{"location":"libs/oscillators/#ospolyblep_triangle","text":"Triangle wave oscillator with suppressed aliasing (using polyBLEP).","title":"(os.)polyblep_triangle"},{"location":"libs/oscillators/#usage_57","text":"polyblep_triangle(f) : _ Where: f : frequency in Hz","title":"Usage"},{"location":"libs/oscillators/#filter-based-oscillators_1","text":"","title":"Filter-Based Oscillators"},{"location":"libs/oscillators/#osquadosc","text":"Sinusoidal oscillator based on QuadOsc by Martin Vicanek.","title":"(os.)quadosc"},{"location":"libs/oscillators/#usage_58","text":"quadosc(freq) : _ where freq : frequency in Hz","title":"Usage"},{"location":"libs/oscillators/#reference_8","text":"https://vicanek.de/articles/QuadOsc.pdf","title":"Reference"},{"location":"libs/phaflangers/","text":"phaflangers.lib A library of phasor and flanger effects. Its official prefix is pf . Functions Reference (pf.)flanger_mono Mono flanging effect. Usage: _ : flanger_mono(dmax,curdel,depth,fb,invert) : _; Where: dmax : maximum delay-line length (power of 2) - 10 ms typical curdel : current dynamic delay (not to exceed dmax) depth : effect strength between 0 and 1 (1 typical) fb : feedback gain between 0 and 1 (0 typical) invert : 0 for normal, 1 to invert sign of flanging sum Reference https://ccrma.stanford.edu/~jos/pasp/Flanging.html (pf.)flanger_stereo Stereo flanging effect. flanger_stereo is a standard Faust function. Usage: _,_ : flanger_stereo(dmax,curdel1,curdel2,depth,fb,invert) : _,_; Where: dmax : maximum delay-line length (power of 2) - 10 ms typical curdel : current dynamic delay (not to exceed dmax) depth : effect strength between 0 and 1 (1 typical) fb : feedback gain between 0 and 1 (0 typical) invert : 0 for normal, 1 to invert sign of flanging sum Reference https://ccrma.stanford.edu/~jos/pasp/Flanging.html (pf.)phaser2_mono Mono phasing effect. Phaser _ : phaser2_mono(Notches,phase,width,frqmin,fratio,frqmax,speed,depth,fb,invert) : _; Where: Notches : number of spectral notches (MACRO ARGUMENT - not a signal) phase : phase of the oscillator (0-1) width : approximate width of spectral notches in Hz frqmin : approximate minimum frequency of first spectral notch in Hz fratio : ratio of adjacent notch frequencies frqmax : approximate maximum frequency of first spectral notch in Hz speed : LFO frequency in Hz (rate of periodic notch sweep cycles) depth : effect strength between 0 and 1 (1 typical) (aka \"intensity\") when depth=2, \"vibrato mode\" is obtained (pure allpass chain) fb : feedback gain between -1 and 1 (0 typical) invert : 0 for normal, 1 to invert sign of flanging sum Reference: https://ccrma.stanford.edu/~jos/pasp/Phasing.html http://www.geofex.com/Article_Folders/phasers/phase.html 'An Allpass Approach to Digital Phasing and Flanging', Julius O. Smith III, CCRMA Tech. Report STANM21: https://ccrma.stanford.edu/STANM/stanms/stanm21/ (pf.)phaser2_stereo Stereo phasing effect. phaser2_stereo is a standard Faust function. Phaser _ : phaser2_stereo(Notches,phase,width,frqmin,fratio,frqmax,speed,depth,fb,invert) : _; Where: Notches : number of spectral notches (MACRO ARGUMENT - not a signal) phase : phase of the oscillator (0-1) width : approximate width of spectral notches in Hz frqmin : approximate minimum frequency of first spectral notch in Hz fratio : ratio of adjacent notch frequencies frqmax : approximate maximum frequency of first spectral notch in Hz speed : LFO frequency in Hz (rate of periodic notch sweep cycles) depth : effect strength between 0 and 1 (1 typical) (aka \"intensity\") when depth=2, \"vibrato mode\" is obtained (pure allpass chain) fb : feedback gain between -1 and 1 (0 typical) invert : 0 for normal, 1 to invert sign of flanging sum Reference: https://ccrma.stanford.edu/~jos/pasp/Phasing.html http://www.geofex.com/Article_Folders/phasers/phase.html 'An Allpass Approach to Digital Phasing and Flanging', Julius O. Smith III, CCRMA Tech. Report STANM21: https://ccrma.stanford.edu/STANM/stanms/stanm21/","title":" phaflangers "},{"location":"libs/phaflangers/#phaflangerslib","text":"A library of phasor and flanger effects. Its official prefix is pf .","title":"phaflangers.lib"},{"location":"libs/phaflangers/#functions-reference","text":"","title":"Functions Reference"},{"location":"libs/phaflangers/#pfflanger_mono","text":"Mono flanging effect.","title":"(pf.)flanger_mono"},{"location":"libs/phaflangers/#usage","text":"_ : flanger_mono(dmax,curdel,depth,fb,invert) : _; Where: dmax : maximum delay-line length (power of 2) - 10 ms typical curdel : current dynamic delay (not to exceed dmax) depth : effect strength between 0 and 1 (1 typical) fb : feedback gain between 0 and 1 (0 typical) invert : 0 for normal, 1 to invert sign of flanging sum","title":"Usage:"},{"location":"libs/phaflangers/#reference","text":"https://ccrma.stanford.edu/~jos/pasp/Flanging.html","title":"Reference"},{"location":"libs/phaflangers/#pfflanger_stereo","text":"Stereo flanging effect. flanger_stereo is a standard Faust function.","title":"(pf.)flanger_stereo"},{"location":"libs/phaflangers/#usage_1","text":"_,_ : flanger_stereo(dmax,curdel1,curdel2,depth,fb,invert) : _,_; Where: dmax : maximum delay-line length (power of 2) - 10 ms typical curdel : current dynamic delay (not to exceed dmax) depth : effect strength between 0 and 1 (1 typical) fb : feedback gain between 0 and 1 (0 typical) invert : 0 for normal, 1 to invert sign of flanging sum","title":"Usage:"},{"location":"libs/phaflangers/#reference_1","text":"https://ccrma.stanford.edu/~jos/pasp/Flanging.html","title":"Reference"},{"location":"libs/phaflangers/#pfphaser2_mono","text":"Mono phasing effect.","title":"(pf.)phaser2_mono"},{"location":"libs/phaflangers/#phaser","text":"_ : phaser2_mono(Notches,phase,width,frqmin,fratio,frqmax,speed,depth,fb,invert) : _; Where: Notches : number of spectral notches (MACRO ARGUMENT - not a signal) phase : phase of the oscillator (0-1) width : approximate width of spectral notches in Hz frqmin : approximate minimum frequency of first spectral notch in Hz fratio : ratio of adjacent notch frequencies frqmax : approximate maximum frequency of first spectral notch in Hz speed : LFO frequency in Hz (rate of periodic notch sweep cycles) depth : effect strength between 0 and 1 (1 typical) (aka \"intensity\") when depth=2, \"vibrato mode\" is obtained (pure allpass chain) fb : feedback gain between -1 and 1 (0 typical) invert : 0 for normal, 1 to invert sign of flanging sum Reference: https://ccrma.stanford.edu/~jos/pasp/Phasing.html http://www.geofex.com/Article_Folders/phasers/phase.html 'An Allpass Approach to Digital Phasing and Flanging', Julius O. Smith III, CCRMA Tech. Report STANM21: https://ccrma.stanford.edu/STANM/stanms/stanm21/","title":"Phaser"},{"location":"libs/phaflangers/#pfphaser2_stereo","text":"Stereo phasing effect. phaser2_stereo is a standard Faust function.","title":"(pf.)phaser2_stereo"},{"location":"libs/phaflangers/#phaser_1","text":"_ : phaser2_stereo(Notches,phase,width,frqmin,fratio,frqmax,speed,depth,fb,invert) : _; Where: Notches : number of spectral notches (MACRO ARGUMENT - not a signal) phase : phase of the oscillator (0-1) width : approximate width of spectral notches in Hz frqmin : approximate minimum frequency of first spectral notch in Hz fratio : ratio of adjacent notch frequencies frqmax : approximate maximum frequency of first spectral notch in Hz speed : LFO frequency in Hz (rate of periodic notch sweep cycles) depth : effect strength between 0 and 1 (1 typical) (aka \"intensity\") when depth=2, \"vibrato mode\" is obtained (pure allpass chain) fb : feedback gain between -1 and 1 (0 typical) invert : 0 for normal, 1 to invert sign of flanging sum Reference: https://ccrma.stanford.edu/~jos/pasp/Phasing.html http://www.geofex.com/Article_Folders/phasers/phase.html 'An Allpass Approach to Digital Phasing and Flanging', Julius O. Smith III, CCRMA Tech. Report STANM21: https://ccrma.stanford.edu/STANM/stanms/stanm21/","title":"Phaser"},{"location":"libs/physmodels/","text":"physmodels.lib Faust physical modeling library. Its official prefix is pm . This library provides an environment to facilitate physical modeling of musical instruments. It contains dozens of functions implementing low and high level elements going from a simple waveguide to fully operational models with built-in UI, etc. It is organized as follows: Global Variables : useful pre-defined variables for physical modeling (e.g., speed of sound, etc.). Conversion Tools : conversion functions specific to physical modeling (e.g., length to frequency, etc.). Bidirectional Utilities : functions to create bidirectional block diagrams for physical modeling. Basic Elements : waveguides, specific types of filters, etc. String Instruments : various types of strings (e.g., steel, nylon, etc.), bridges, guitars, etc. Bowed String Instruments : parts and models specific to bowed string instruments (e.g., bows, bridges, violins, etc.). Wind Instrument : parts and models specific to wind string instruments (e.g., reeds, mouthpieces, flutes, clarinets, etc.). Exciters : pluck generators, \"blowers\", etc. Modal Percussions : percussion instruments based on modal models. Vocal Synthesis : functions for various vocal synthesis techniques (e.g., fof, source/filter, etc.) and vocal synthesizers. Misc Functions : any other functions that don't fit in the previous category (e.g., nonlinear filters, etc.). This library is part of the Faust Physical Modeling ToolKit. More information on how to use this library can be found on this page: * https://ccrma.stanford.edu/~rmichon/pmFaust . Tutorials on how to make physical models of musical instruments using Faust can be found here as well. Global Variables Useful pre-defined variables for physical modeling. (pm.)speedOfSound Speed of sound in meters per second (340m/s). (pm.)maxLength The default maximum length (3) in meters of strings and tubes used in this library. This variable should be overriden to allow longer strings or tubes. Conversion Tools Useful conversion tools for physical modeling. (pm.)f2l Frequency to length in meters. Usage f2l(freq) : distanceInMeters Where: freq : the frequency (pm.)l2f Length in meters to frequency. Usage l2f(length) : freq Where: length : length/distance in meters (pm.)l2s Length in meters to number of samples. Usage l2s(l) : numberOfSamples Where: l : length in meters Bidirectional Utilities Set of fundamental functions to create bi-directional block diagrams in Faust. These elements are used as the basis of this library to connect high level elements (e.g., mouthpieces, strings, bridge, instrument body, etc.). Each block has 3 inputs and 3 outputs. The first input/output carry left going waves, the second input/output carry right going waves, and the third input/output is used to carry any potential output signal to the end of the algorithm. (pm.)basicBlock Empty bidirectional block to be used with chain : 3 signals ins and 3 signals out. Usage chain(basicBlock : basicBlock : etc.) (pm.)chain Creates a chain of bidirectional blocks. Blocks must have 3 inputs and outputs. The first input/output carry left going waves, the second input/output carry right going waves, and the third input/output is used to carry any potential output signal to the end of the algorithm. The implied one sample delay created by the ~ operator is generalized to the left and right going waves. Thus, n blocks in chain() will add an n samples delay to both left and right going waves. Usage leftGoingWaves,rightGoingWaves,mixedOutput : chain( A : B ) : leftGoingWaves,rightGoingWaves,mixedOutput with{ A = _,_,_; }; (pm.)inLeftWave Adds a signal to left going waves anywhere in a chain of blocks. Usage model(x) = chain(A : inLeftWave(x) : B) Where A and B are bidirectional blocks and x is the signal added to left going waves in that chain. (pm.)inRightWave Adds a signal to right going waves anywhere in a chain of blocks. Usage model(x) = chain(A : inRightWave(x) : B) Where A and B are bidirectional blocks and x is the signal added to right going waves in that chain. (pm.)in Adds a signal to left and right going waves anywhere in a chain of blocks. Usage model(x) = chain(A : in(x) : B) Where A and B are bidirectional blocks and x is the signal added to left and right going waves in that chain. (pm.)outLeftWave Sends the signal of left going waves to the output channel of the chain . Usage chain(A : outLeftWave : B) Where A and B are bidirectional blocks. (pm.)outRightWave Sends the signal of right going waves to the output channel of the chain . Usage chain(A : outRightWave : B) Where A and B are bidirectional blocks. (pm.)out Sends the signal of right and left going waves to the output channel of the chain . Usage chain(A : out : B) Where A and B are bidirectional blocks. (pm.)terminations Creates terminations on both sides of a chain without closing the inputs and outputs of the bidirectional signals chain. As for chain , this function adds a 1 sample delay to the bidirectional signal, both ways. Of course, this function can be nested within a chain . Usage terminations(a,b,c) with{ }; (pm.)lTermination Creates a termination on the left side of a chain without closing the inputs and outputs of the bidirectional signals chain. This function adds a 1 sample delay near the termination and can be nested within another chain . Usage lTerminations(a,b) with{ }; (pm.)rTermination Creates a termination on the right side of a chain without closing the inputs and outputs of the bidirectional signals chain. This function adds a 1 sample delay near the termination and can be nested within another chain . Usage rTerminations(b,c) with{ }; (pm.)closeIns Closes the inputs of a bidirectional chain in all directions. Usage closeIns : chain(...) : _,_,_ (pm.)closeOuts Closes the outputs of a bidirectional chain in all directions except for the main signal output (3d output). Usage _,_,_ : chain(...) : _ (pm.)endChain Closes the inputs and outputs of a bidirectional chain in all directions except for the main signal output (3d output). Usage endChain(chain(...)) : _ Basic Elements Basic elements for physical modeling (e.g., waveguides, specific filters, etc.). (pm.)waveguideN A series of waveguide functions based on various types of delays (see fdelay[n] ). List of functions waveguideUd : unit delay waveguide waveguideFd : fractional delay waveguide waveguideFd2 : second order fractional delay waveguide waveguideFd4 : fourth order fractional delay waveguide Usage chain(A : waveguideUd(nMax,n) : B) Where: nMax : the maximum length of the delays in the waveguide n : the length of the delay lines in samples. (pm.)waveguide Standard pm.lib waveguide (based on waveguideFd4 ). Usage chain(A : waveguide(nMax,n) : B) Where: nMax : the maximum length of the delays in the waveguide n : the length of the delay lines in samples. (pm.)bridgeFilter Generic two zeros bridge FIR filter (as implemented in the STK ) that can be used to implement the reflectance violin, guitar, etc. bridges. Usage _ : bridge(brightness,absorption) : _ Where: brightness : controls the damping of high frequencies (0-1) absorption : controls the absorption of the brige and thus the t60 of the string plugged to it (0-1) (1 = 20 seconds) (pm.)modeFilter Resonant bandpass filter that can be used to implement a single resonance (mode). Usage _ : modeFilter(freq,t60,gain) : _ Where: freq : mode frequency t60 : mode resonance duration (in seconds) gain : mode gain (0-1) String Instruments Low and high level string instruments parts. Most of the elements in this section can be used in a bidirectional chain. (pm.)stringSegment A string segment without terminations (just a simple waveguide). Usage chain(A : stringSegment(maxLength,length) : B) Where: maxLength : the maximum length of the string in meters (should be static) length : the length of the string in meters (pm.)openString A bidirectional block implementing a basic \"generic\" string with a selectable excitation position. Lowpass filters are built-in and allow to simulate the effect of dispersion on the sound and thus to change the \"stiffness\" of the string. Usage chain(... : openString(length,stiffness,pluckPosition,excitation) : ...) Where: length : the length of the string in meters stiffness : the stiffness of the string (0-1) (1 for max stiffness) pluckPosition : excitation position (0-1) (1 is bottom) excitation : the excitation signal (pm.)nylonString A bidirectional block implementing a basic nylon string with selectable excitation position. This element is based on openString and has a fix stiffness corresponding to that of a nylon string. Usage chain(... : nylonString(length,pluckPosition,excitation) : ...) Where: length : the length of the string in meters pluckPosition : excitation position (0-1) (1 is bottom) excitation : the excitation signal (pm.)steelString A bidirectional block implementing a basic steel string with selectable excitation position. This element is based on openString and has a fix stiffness corresponding to that of a steel string. Usage chain(... : steelString(length,pluckPosition,excitation) : ...) Where: length : the length of the string in meters pluckPosition : excitation position (0-1) (1 is bottom) excitation : the excitation signal (pm.)openStringPick A bidirectional block implementing a \"generic\" string with selectable excitation position. It also has a built-in pickup whose position is the same as the excitation position. Thus, moving the excitation position will also move the pickup. Usage chain(... : openStringPick(length,stiffness,pluckPosition,excitation) : ...) Where: length : the length of the string in meters stiffness : the stiffness of the string (0-1) (1 for max stiffness) pluckPosition : excitation position (0-1) (1 is bottom) excitation : the excitation signal (pm.)openStringPickUp A bidirectional block implementing a \"generic\" string with selectable excitation position and stiffness. It also has a built-in pickup whose position can be independenly selected. The only constraint is that the pickup has to be placed after the excitation position. Usage chain(... : openStringPickUp(length,stiffness,pluckPosition,excitation) : ...) Where: length : the length of the string in meters stiffness : the stiffness of the string (0-1) (1 for max stiffness) pluckPosition : pluck position between the top of the string and the pickup (0-1) (1 for same as pickup position) pickupPosition : position of the pickup on the string (0-1) (1 is bottom) excitation : the excitation signal (pm.)openStringPickDown A bidirectional block implementing a \"generic\" string with selectable excitation position and stiffness. It also has a built-in pickup whose position can be independenly selected. The only constraint is that the pickup has to be placed before the excitation position. Usage chain(... : openStringPickDown(length,stiffness,pluckPosition,excitation) : ...) Where: length : the length of the string in meters stiffness : the stiffness of the string (0-1) (1 for max stiffness) pluckPosition : pluck position on the string (0-1) (1 is bottom) pickupPosition : position of the pickup between the top of the string and the excitation position (0-1) (1 is excitation position) excitation : the excitation signal (pm.)ksReflexionFilter The \"typical\" one-zero Karplus-strong feedforward reflexion filter. This filter will be typically used in a termination (see below). Usage terminations(_,chain(...),ksReflexionFilter) (pm.)rStringRigidTermination Bidirectional block implementing a right rigid string termination (no damping, just phase inversion). Usage chain(rStringRigidTermination : stringSegment : ...) (pm.)lStringRigidTermination Bidirectional block implementing a left rigid string termination (no damping, just phase inversion). Usage chain(... : stringSegment : lStringRigidTermination) (pm.)elecGuitarBridge Bidirectional block implementing a simple electric guitar bridge. This block is based on bridgeFilter . The bridge doesn't implement transmittance since it is not meant to be connected to a body (unlike acoustic guitar). It also partially sets the resonance duration of the string with the nuts used on the other side. Usage chain(... : stringSegment : elecGuitarBridge) (pm.)elecGuitarNuts Bidirectional block implementing a simple electric guitar nuts. This block is based on bridgeFilter and does essentially the same thing as elecGuitarBridge , but on the other side of the chain. It also partially sets the resonance duration of the string with the bridge used on the other side. Usage chain(elecGuitarNuts : stringSegment : ...) (pm.)guitarBridge Bidirectional block implementing a simple acoustic guitar bridge. This bridge damps more hight frequencies than elecGuitarBridge and implements a transmittance filter. It also partially sets the resonance duration of the string with the nuts used on the other side. Usage chain(... : stringSegment : guitarBridge) (pm.)guitarNuts Bidirectional block implementing a simple acoustic guitar nuts. This nuts damps more hight frequencies than elecGuitarNuts and implements a transmittance filter. It also partially sets the resonance duration of the string with the bridge used on the other side. Usage chain(guitarNuts : stringSegment : ...) (pm.)idealString An \"ideal\" string with rigid terminations and where the plucking position and the pick-up position are the same. Since terminations are rigid, this string will ring forever. Usage 1-1' : idealString(length,reflexion,xPosition,excitation) With: * length : the length of the string in meters * pluckPosition : the plucking position (0.001-0.999) * excitation : the input signal for the excitation. (pm.)ks A Karplus-Strong string (in that case, the string is implemented as a one dimension waveguide). Usage ks(length,damping,excitation) : _ Where: length : the length of the string in meters damping : string damping (0-1) excitation : excitation signal (pm.)ks_ui_MIDI Ready-to-use, MIDI-enabled Karplus-Strong string with buil-in UI. Usage ks_ui_MIDI : _ (pm.)elecGuitarModel A simple electric guitar model (without audio effects, of course) with selectable pluck position. This model implements a single string. Additional strings should be created by making a polyphonic applications out of this function. Pitch is changed by changing the length of the string and not through a finger model. Usage elecGuitarModel(length,pluckPosition,mute,excitation) : _ Where: length : the length of the string in meters pluckPosition : pluck position (0-1) (1 is on the bridge) mute : mute coefficient (1 for no mute and 0 for instant mute) excitation : excitation signal (pm.)elecGuitar A simple electric guitar model with steel strings (based on elecGuitarModel ) implementing an excitation model. This model implements a single string. Additional strings should be created by making a polyphonic applications out of this function. Usage elecGuitar(length,pluckPosition,trigger) : _ Where: length : the length of the string in meters pluckPosition : pluck position (0-1) (1 is on the bridge) mute : mute coefficient (1 for no mute and 0 for instant mute) gain : gain of the pluck (0-1) trigger : trigger signal (1 for on, 0 for off) (pm.)elecGuitar_ui_MIDI Ready-to-use MIDI-enabled electric guitar physical model with built-in UI. Usage elecGuitar_ui_MIDI : _ (pm.)guitarBody WARNING: not implemented yet! Bidirectional block implementing a simple acoustic guitar body. Usage chain(... : guitarBody) (pm.)guitarModel A simple acoustic guitar model with steel strings and selectable excitation position. This model implements a single string. Additional strings should be created by making a polyphonic applications out of this function. Pitch is changed by changing the length of the string and not through a finger model. WARNING: this function doesn't currently implement a body (just strings and bridge). Usage guitarModel(length,pluckPosition,excitation) : _ Where: length : the length of the string in meters pluckPosition : pluck position (0-1) (1 is on the bridge) excitation : excitation signal (pm.)guitar A simple acoustic guitar model with steel strings (based on guitarModel ) implementing an excitation model. This model implements a single string. Additional strings should be created by making a polyphonic applications out of this function. Usage guitar(length,pluckPosition,trigger) : _ Where: length : the length of the string in meters pluckPosition : pluck position (0-1) (1 is on the bridge) gain : gain of the excitation trigger : trigger signal (1 for on, 0 for off) (pm.)guitar_ui_MIDI Ready-to-use MIDI-enabled steel strings acoustic guitar physical model with built-in UI. Usage guitar_ui_MIDI : _ (pm.)nylonGuitarModel A simple acoustic guitar model with nylon strings and selectable excitation position. This model implements a single string. Additional strings should be created by making a polyphonic applications out of this function. Pitch is changed by changing the length of the string and not through a finger model. WARNING: this function doesn't currently implement a body (just strings and bridge). Usage nylonGuitarModel(length,pluckPosition,excitation) : _ Where: length : the length of the string in meters pluckPosition : pluck position (0-1) (1 is on the bridge) excitation : excitation signal (pm.)nylonGuitar A simple acoustic guitar model with nylon strings (based on nylonGuitarModel ) implementing an excitation model. This model implements a single string. Additional strings should be created by making a polyphonic applications out of this function. Usage nylonGuitar(length,pluckPosition,trigger) : _ Where: length : the length of the string in meters pluckPosition : pluck position (0-1) (1 is on the bridge) gain : gain of the excitation (0-1) trigger : trigger signal (1 for on, 0 for off) (pm.)nylonGuitar_ui_MIDI Ready-to-use MIDI-enabled nylon strings acoustic guitar physical model with built-in UI. Usage nylonGuitar_ui_MIDI : _ (pm.)modeInterpRes Modular string instrument resonator based on IR measurements made on 3D printed models. The 2D space allowing for the control of the shape and the scale of the model is enabled by interpolating between modes parameters. More information about this technique/project can be found here: * https://ccrma.stanford.edu/~rmichon/3dPrintingModeling/ . Usage _ : modeInterpRes(nModes,x,y) : _ Where: nModes : number of modeled modes (40 max) x : shape of the resonator (0: square, 1: square with rounded corners, 2: round) y : scale of the resonator (0: small, 1: medium, 2: large) (pm.)modularInterpBody Bidirectional block implementing a modular string instrument resonator (see modeInterpRes ). Usage chain(... : modularInterpBody(nModes,shape,scale) : ...) Where: nModes : number of modeled modes (40 max) shape : shape of the resonator (0: square, 1: square with rounded corners, 2: round) scale : scale of the resonator (0: small, 1: medium, 2: large) (pm.)modularInterpStringModel String instrument model with a modular body (see modeInterpRes and * https://ccrma.stanford.edu/~rmichon/3dPrintingModeling/ ). Usage modularInterpStringModel(length,pluckPosition,shape,scale,bodyExcitation,stringExcitation) : _ Where: stringLength : the length of the string in meters pluckPosition : pluck position (0-1) (1 is on the bridge) shape : shape of the resonator (0: square, 1: square with rounded corners, 2: round) scale : scale of the resonator (0: small, 1: medium, 2: large) bodyExcitation : excitation signal for the body stringExcitation : excitation signal for the string (pm.)modularInterpInstr String instrument with a modular body (see modeInterpRes and * https://ccrma.stanford.edu/~rmichon/3dPrintingModeling/ ). Usage modularInterpInstr(stringLength,pluckPosition,shape,scale,gain,tapBody,triggerString) : _ Where: stringLength : the length of the string in meters pluckPosition : pluck position (0-1) (1 is on the bridge) shape : shape of the resonator (0: square, 1: square with rounded corners, 2: round) scale : scale of the resonator (0: small, 1: medium, 2: large) gain : of the string excitation tapBody : send an impulse in the body of the instrument where the string is connected (1 for on, 0 for off) triggerString : trigger signal for the string (1 for on, 0 for off) (pm.)modularInterpInstr_ui_MIDI Ready-to-use MIDI-enabled string instrument with a modular body (see modeInterpRes and * https://ccrma.stanford.edu/~rmichon/3dPrintingModeling/ ) with built-in UI. Usage modularInterpInstr_ui_MIDI : _ Bowed String Instruments Low and high level basic string instruments parts. Most of the elements in this section can be used in a bidirectional chain. (pm.)bowTable Extremely basic bow table that can be used to implement a wide range of bow types for many different bowed string instruments (violin, cello, etc.). Usage excitation : bowTable(offeset,slope) : _ Where: excitation : an excitation signal offset : table offset slope : table slope (pm.)violinBowTable Violin bow table based on bowTable . Usage bowVelocity : violinBowTable(bowPressure) : _ Where: bowVelocity : velocity of the bow/excitation signal (0-1) bowPressure : bow pressure on the string (0-1) (pm.)bowInteraction Bidirectional block implementing the interaction of a bow in a chain . Usage chain(... : stringSegment : bowInteraction(bowTable) : stringSegment : ...) Where: bowTable : the bow table (pm.)violinBow Bidirectional block implementing a violin bow and its interaction with a string. Usage chain(... : stringSegment : violinBow(bowPressure,bowVelocity) : stringSegment : ...) Where: bowVelocity : velocity of the bow / excitation signal (0-1) bowPressure : bow pressure on the string (0-1) (pm.)violinBowedString Violin bowed string bidirectional block with controllable bow position. Terminations are not implemented in this model. Usage chain(nuts : violinBowedString(stringLength,bowPressure,bowVelocity,bowPosition) : bridge) Where: stringLength : the length of the string in meters bowVelocity : velocity of the bow / excitation signal (0-1) bowPressure : bow pressure on the string (0-1) bowPosition : the position of the bow on the string (0-1) (pm.)violinNuts Bidirectional block implementing simple violin nuts. This function is based on bridgeFilter . Usage chain(violinNuts : stringSegment : ...) (pm.)violinBridge Bidirectional block implementing a simple violin bridge. This function is based on bridgeFilter . Usage chain(... : stringSegment : violinBridge (pm.)violinBody Bidirectional block implementing a simple violin body (just a simple resonant lowpass filter). Usage chain(... : stringSegment : violinBridge : violinBody) (pm.)violinModel Ready-to-use simple violin physical model. This model implements a single string. Additional strings should be created by making a polyphonic applications out of this function. Pitch is changed by changing the length of the string (and not through a finger model). Usage violinModel(stringLength,bowPressure,bowVelocity,bridgeReflexion, bridgeAbsorption,bowPosition) : _ Where: stringLength : the length of the string in meters bowVelocity : velocity of the bow / excitation signal (0-1) bowPressure : bow pressure on the string (0-1)) bowPosition : the position of the bow on the string (0-1) (pm.)violin_ui Ready-to-use violin physical model with built-in UI. Usage violinModel_ui : _ (pm.)violin_ui_MIDI Ready-to-use MIDI-enabled violin physical model with built-in UI. Usage violin_ui_MIDI : _ Wind Instruments Low and high level basic wind instruments parts. Most of the elements in this section can be used in a bidirectional chain. (pm.)openTube A tube segment without terminations (same as stringSegment ). Usage chain(A : openTube(maxLength,length) : B) Where: maxLength : the maximum length of the tube in meters (should be static) length : the length of the tube in meters (pm.)reedTable Extremely basic reed table that can be used to implement a wide range of single reed types for many different instruments (saxophone, clarinet, etc.). Usage excitation : reedTable(offeset,slope) : _ Where: excitation : an excitation signal offset : table offset slope : table slope (pm.)fluteJetTable Extremely basic flute jet table. Usage excitation : fluteJetTable : _ Where: excitation : an excitation signal (pm.)brassLipsTable Simple brass lips/mouthpiece table. Since this implementation is very basic and that the lips and tube of the instrument are coupled to each other, the length of that tube must be provided here. Usage excitation : brassLipsTable(tubeLength,lipsTension) : _ Where: excitation : an excitation signal (can be DC) tubeLength : length in meters of the tube connected to the mouthpiece lipsTension : tension of the lips (0-1) (default: 0.5) (pm.)clarinetReed Clarinet reed based on reedTable with controllable stiffness. Usage excitation : clarinetReed(stiffness) : _ Where: excitation : an excitation signal stiffness : reed stiffness (0-1) (pm.)clarinetMouthPiece Bidirectional block implementing a clarinet mouthpiece as well as the various interactions happening with traveling waves. This element is ready to be plugged to a tube... Usage chain(clarinetMouthPiece(reedStiffness,pressure) : tube : etc.) Where: pressure : the pressure of the air flow (DC) created by the virtual performer (0-1). This can also be any kind of signal that will directly injected in the mouthpiece (e.g., breath noise, etc.). reedStiffness : reed stiffness (0-1) (pm.)brassLips Bidirectional block implementing a brass mouthpiece as well as the various interactions happening with traveling waves. This element is ready to be plugged to a tube... Usage chain(brassLips(tubeLength,lipsTension,pressure) : tube : etc.) Where: tubeLength : length in meters of the tube connected to the mouthpiece lipsTension : tension of the lips (0-1) (default: 0.5) pressure : the pressure of the air flow (DC) created by the virtual performer (0-1). This can also be any kind of signal that will directly injected in the mouthpiece (e.g., breath noise, etc.). (pm.)fluteEmbouchure Bidirectional block implementing a flute embouchure as well as the various interactions happening with traveling waves. This element is ready to be plugged between tubes segments... Usage chain(... : tube : fluteEmbouchure(pressure) : tube : etc.) Where: pressure : the pressure of the air flow (DC) created by the virtual performer (0-1). This can also be any kind of signal that will directly injected in the mouthpiece (e.g., breath noise, etc.). (pm.)wBell Generic wind instrument bell bidirectional block that should be placed at the end of a chain . Usage chain(... : wBell(opening)) Where: opening : the \"opening\" of bell (0-1) (pm.)fluteHead Simple flute head implementing waves reflexion. Usage chain(fluteHead : tube : ...) (pm.)fluteFoot Simple flute foot implementing waves reflexion and dispersion. Usage chain(... : tube : fluteFoot) (pm.)clarinetModel A simple clarinet physical model without tone holes (pitch is changed by changing the length of the tube of the instrument). Usage clarinetModel(length,pressure,reedStiffness,bellOpening) : _ Where: tubeLength : the length of the tube in meters pressure : the pressure of the air flow created by the virtual performer (0-1). This can also be any kind of signal that will directly injected in the mouthpiece (e.g., breath noise, etc.). reedStiffness : reed stiffness (0-1) bellOpening : the opening of bell (0-1) (pm.)clarinetModel_ui Same as clarinetModel but with a built-in UI. This function doesn't implement a virtual \"blower\", thus pressure remains an argument here. Usage clarinetModel_ui(pressure) : _ Where: pressure : the pressure of the air flow created by the virtual performer (0-1). This can also be any kind of signal that will be directly injected in the mouthpiece (e.g., breath noise, etc.). (pm.)clarinet_ui Ready-to-use clarinet physical model with built-in UI based on clarinetModel . Usage clarinet_ui : _ (pm.)clarinet_ui_MIDI Ready-to-use MIDI compliant clarinet physical model with built-in UI. Usage clarinet_ui_MIDI : _ (pm.)brassModel A simple generic brass instrument physical model without pistons (pitch is changed by changing the length of the tube of the instrument). This model is kind of hard to control and might not sound very good if bad parameters are given to it... Usage brassModel(tubeLength,lipsTension,mute,pressure) : _ Where: tubeLength : the length of the tube in meters lipsTension : tension of the lips (0-1) (default: 0.5) mute : mute opening at the end of the instrument (0-1) (default: 0.5) pressure : the pressure of the air flow created by the virtual performer (0-1). This can also be any kind of signal that will directly injected in the mouthpiece (e.g., breath noise, etc.). (pm.)brassModel_ui Same as brassModel but with a built-in UI. This function doesn't implement a virtual \"blower\", thus pressure remains an argument here. Usage brassModel_ui(pressure) : _ Where: pressure : the pressure of the air flow created by the virtual performer (0-1). This can also be any kind of signal that will be directly injected in the mouthpiece (e.g., breath noise, etc.). (pm.)brass_ui Ready-to-use brass instrument physical model with built-in UI based on brassModel . Usage brass_ui : _ (pm.)brass_ui_MIDI Ready-to-use MIDI-controllable brass instrument physical model with built-in UI. Usage brass_ui_MIDI : _ (pm.)fluteModel A simple generic flute instrument physical model without tone holes (pitch is changed by changing the length of the tube of the instrument). Usage fluteModel(tubeLength,mouthPosition,pressure) : _ Where: tubeLength : the length of the tube in meters mouthPosition : position of the mouth on the embouchure (0-1) (default: 0.5) pressure : the pressure of the air flow created by the virtual performer (0-1). This can also be any kind of signal that will directly injected in the mouthpiece (e.g., breath noise, etc.). (pm.)fluteModel_ui Same as fluteModel but with a built-in UI. This function doesn't implement a virtual \"blower\", thus pressure remains an argument here. Usage fluteModel_ui(pressure) : _ Where: pressure : the pressure of the air flow created by the virtual performer (0-1). This can also be any kind of signal that will be directly injected in the mouthpiece (e.g., breath noise, etc.). (pm.)flute_ui Ready-to-use flute physical model with built-in UI based on fluteModel . Usage flute_ui : _ (pm.)flute_ui_MIDI Ready-to-use MIDI-controllable flute physical model with built-in UI. Usage flute_ui_MIDI : _ Exciters Various kind of excitation signal generators. (pm.)impulseExcitation Creates an impulse excitation of one sample. Usage gate = button('gate'); impulseExcitation(gate) : chain; Where: gate : a gate button (pm.)strikeModel Creates a filtered noise excitation. Usage gate = button('gate'); strikeModel(LPcutoff,HPcutoff,sharpness,gain,gate) : chain; Where: HPcutoff : highpass cutoff frequency LPcutoff : lowpass cutoff frequency sharpness : sharpness of the attack and release (0-1) gain : gain of the excitation gate : a gate button/trigger signal (0/1) (pm.)strike Strikes generator with controllable excitation position. Usage gate = button('gate'); strike(exPos,sharpness,gain,gate) : chain; Where: exPos : excitation position wiht 0: for max low freqs and 1: for max high freqs. So, on membrane for example, 0 would be the middle and 1 the edge sharpness : sharpness of the attack and release (0-1) gain : gain of the excitation gate : a gate button/trigger signal (0/1) (pm.)pluckString Creates a plucking excitation signal. Usage trigger = button('gate'); pluckString(stringLength,cutoff,maxFreq,sharpness,trigger) Where: stringLength : length of the string to pluck cutoff : cutoff ratio (1 for default) maxFreq : max frequency ratio (1 for default) sharpness : sharpness of the attack and release (1 for default) gain : gain of the excitation (0-1) trigger : trigger signal (1 for on, 0 for off) (pm.)blower A virtual blower creating a DC signal with some breath noise in it. Usage blower(pressure,breathGain,breathCutoff) : _ Where: pressure : pressure (0-1) breathGain : breath noise gain (0-1) (recommended: 0.005) breathCutoff : breath cuttoff frequency (Hz) (recommended: 2000) (pm.)blower_ui Same as blower but with a built-in UI. Usage blower : somethingToBeBlown Modal Percussions High and low level functions for modal synthesis of percussion instruments. (pm.)djembeModel Dirt-simple djembe modal physical model. Mode parameters are empirically calculated and don't correspond to any measurements or 3D model. They kind of sound good though :). Usage excitation : djembeModel(freq) Where: excitation : excitation signal freq : fundamental frequency of the bar (pm.)djembe Dirt-simple djembe modal physical model. Mode parameters are empirically calculated and don't correspond to any measurements or 3D model. They kind of sound good though :). This model also implements a virtual \"exciter\". Usage djembe(freq,strikePosition,strikeSharpness,gain,trigger) Where: freq : fundamental frequency of the model strikePosition : strike position (0 for the middle of the membrane and 1 for the edge) strikeSharpness : sharpness of the strike (0-1, default: 0.5) gain : gain of the strike trigger : trigger signal (0: off, 1: on) (pm.)djembe_ui_MIDI Simple MIDI controllable djembe physical model with built-in UI. Usage djembe_ui_MIDI : _ (pm.)marimbaBarModel Generic marimba tone bar modal model. This model was generated using mesh2faust from a 3D CAD model of a marimba tone bar ( libraries/modalmodels/marimbaBar ). The corresponding CAD model is that of a C2 tone bar (original fundamental frequency: ~65Hz). While marimbaBarModel allows to translate the harmonic content of the generated sound by providing a frequency ( freq ), mode transposition has limits and the model will sound less and less like a marimba tone bar as it diverges from C2. To make an accurate model of a marimba, we'd want to have an independent model for each bar... This model contains 5 excitation positions going linearly from the center bottom to the center top of the bar. Obviously, a model with more excitation position could be regenerated using mesh2faust . Usage excitation : marimbaBarModel(freq,exPos,t60,t60DecayRatio,t60DecaySlope) Where: excitation : excitation signal freq : fundamental frequency of the bar exPos : excitation position (0-4) t60 : T60 in seconds (recommended value: 0.1) t60DecayRatio : T60 decay ratio (recommended value: 1) t60DecaySlope : T60 decay slope (recommended value: 5) (pm.)marimbaResTube Simple marimba resonance tube. Usage marimbaResTube(tubeLength,excitation) Where: tubeLength : the length of the tube in meters excitation : the excitation signal (audio in) (pm.)marimbaModel Simple marimba physical model implementing a single tone bar connected to tube. This model is scalable and can be adapted to any size of bar/tube (see marimbaBarModel to know more about the limitations of this type of system). Usage excitation : marimbaModel(freq,exPos) : _ Where: freq : the frequency of the bar/tube couple exPos : excitation position (0-4) (pm.)marimba Simple marimba physical model implementing a single tone bar connected to tube. This model is scalable and can be adapted to any size of bar/tube (see marimbaBarModel to know more about the limitations of this type of system). This function also implement a virtual exciter to drive the model. Usage excitation : marimba(freq,strikePosition,strikeCutoff,strikeSharpness,gain,trigger) : _ Where: excitation : the excitation signal freq : the frequency of the bar/tube couple strikePosition : strike position (0-4) strikeCutoff : cuttoff frequency of the strike genarator (recommended: ~7000Hz) strikeSharpness : shaarpness of the strike (recommened: ~0.25) gain : gain of the strike (0-1) trigger signal (0: off, 1: on) (pm.)marimba_ui_MIDI Simple MIDI controllable marimba physical model with built-in UI implementing a single tone bar connected to tube. This model is scalable and can be adapted to any size of bar/tube (see marimbaBarModel to know more about the limitations of this type of system). Usage marimba_ui_MIDI : _ (pm.)churchBellModel Generic church bell modal model generated by mesh2faust from libraries/modalmodels/churchBell . Modeled after T. Rossing and R. Perrin, Vibrations of Bells, Applied Acoustics 2, 1987. Model height is 301 mm. This model contains 7 excitation positions going linearly from the bottom to the top of the bell. Obviously, a model with more excitation position could be regenerated using mesh2faust . Usage excitation : churchBellModel(nModes,exPos,t60,t60DecayRatio,t60DecaySlope) Where: excitation : the excitation signal nModes : number of synthesized modes (max: 50) exPos : excitation position (0-6) t60 : T60 in seconds (recommended value: 0.1) t60DecayRatio : T60 decay ratio (recommended value: 1) t60DecaySlope : T60 decay slope (recommended value: 5) (pm.)churchBell Generic church bell modal model. Modeled after T. Rossing and R. Perrin, Vibrations of Bells, Applied Acoustics 2, 1987. Model height is 301 mm. This model contains 7 excitation positions going linearly from the bottom to the top of the bell. Obviously, a model with more excitation position could be regenerated using mesh2faust . This function also implement a virtual exciter to drive the model. Usage excitation : churchBell(strikePosition,strikeCutoff,strikeSharpness,gain,trigger) : _ Where: excitation : the excitation signal strikePosition : strike position (0-6) strikeCutoff : cuttoff frequency of the strike genarator (recommended: ~7000Hz) strikeSharpness : shaarpness of the strike (recommened: ~0.25) gain : gain of the strike (0-1) trigger signal (0: off, 1: on) (pm.)churchBell_ui Church bell physical model based on churchBell with built-in UI. Usage churchBell_ui : _ (pm.)englishBellModel English church bell modal model generated by mesh2faust from libraries/modalmodels/englishBell . Modeled after D. Bartocha and . Baron, Influence of Tin Bronze Melting and Pouring Parameters on Its Properties and Bell' Tone, Archives of Foundry Engineering, 2016. Model height is 1 m. This model contains 7 excitation positions going linearly from the bottom to the top of the bell. Obviously, a model with more excitation position could be regenerated using mesh2faust . Usage excitation : englishBellModel(nModes,exPos,t60,t60DecayRatio,t60DecaySlope) Where: excitation : the excitation signal nModes : number of synthesized modes (max: 50) exPos : excitation position (0-6) t60 : T60 in seconds (recommended value: 0.1) t60DecayRatio : T60 decay ratio (recommended value: 1) t60DecaySlope : T60 decay slope (recommended value: 5) (pm.)englishBell English church bell modal model. Modeled after D. Bartocha and . Baron, Influence of Tin Bronze Melting and Pouring Parameters on Its Properties and Bell' Tone, Archives of Foundry Engineering, 2016. Model height is 1 m. This model contains 7 excitation positions going linearly from the bottom to the top of the bell. Obviously, a model with more excitation position could be regenerated using mesh2faust . This function also implement a virtual exciter to drive the model. Usage excitation : englishBell(strikePosition,strikeCutoff,strikeSharpness,gain,trigger) : _ Where: excitation : the excitation signal strikePosition : strike position (0-6) strikeCutoff : cuttoff frequency of the strike genarator (recommended: ~7000Hz) strikeSharpness : shaarpness of the strike (recommened: ~0.25) gain : gain of the strike (0-1) trigger signal (0: off, 1: on) (pm.)englishBell_ui English church bell physical model based on englishBell with built-in UI. Usage englishBell_ui : _ (pm.)frenchBellModel French church bell modal model generated by mesh2faust from libraries/modalmodels/frenchBell . Modeled after D. Bartocha and . Baron, Influence of Tin Bronze Melting and Pouring Parameters on Its Properties and Bell' Tone, Archives of Foundry Engineering, 2016. Model height is 1 m. This model contains 7 excitation positions going linearly from the bottom to the top of the bell. Obviously, a model with more excitation position could be regenerated using mesh2faust . Usage excitation : frenchBellModel(nModes,exPos,t60,t60DecayRatio,t60DecaySlope) Where: excitation : the excitation signal nModes : number of synthesized modes (max: 50) exPos : excitation position (0-6) t60 : T60 in seconds (recommended value: 0.1) t60DecayRatio : T60 decay ratio (recommended value: 1) t60DecaySlope : T60 decay slope (recommended value: 5) (pm.)frenchBell French church bell modal model. Modeled after D. Bartocha and . Baron, Influence of Tin Bronze Melting and Pouring Parameters on Its Properties and Bell' Tone, Archives of Foundry Engineering, 2016. Model height is 1 m. This model contains 7 excitation positions going linearly from the bottom to the top of the bell. Obviously, a model with more excitation position could be regenerated using mesh2faust . This function also implement a virtual exciter to drive the model. Usage excitation : frenchBell(strikePosition,strikeCutoff,strikeSharpness,gain,trigger) : _ Where: excitation : the excitation signal strikePosition : strike position (0-6) strikeCutoff : cuttoff frequency of the strike genarator (recommended: ~7000Hz) strikeSharpness : shaarpness of the strike (recommened: ~0.25) gain : gain of the strike (0-1) trigger signal (0: off, 1: on) (pm.)frenchBell_ui French church bell physical model based on frenchBell with built-in UI. Usage frenchBell_ui : _ (pm.)germanBellModel German church bell modal model generated by mesh2faust from libraries/modalmodels/germanBell . Modeled after D. Bartocha and . Baron, Influence of Tin Bronze Melting and Pouring Parameters on Its Properties and Bell' Tone, Archives of Foundry Engineering, 2016. Model height is 1 m. This model contains 7 excitation positions going linearly from the bottom to the top of the bell. Obviously, a model with more excitation position could be regenerated using mesh2faust . Usage excitation : germanBellModel(nModes,exPos,t60,t60DecayRatio,t60DecaySlope) Where: excitation : the excitation signal nModes : number of synthesized modes (max: 50) exPos : excitation position (0-6) t60 : T60 in seconds (recommended value: 0.1) t60DecayRatio : T60 decay ratio (recommended value: 1) t60DecaySlope : T60 decay slope (recommended value: 5) (pm.)germanBell German church bell modal model. Modeled after D. Bartocha and . Baron, Influence of Tin Bronze Melting and Pouring Parameters on Its Properties and Bell' Tone, Archives of Foundry Engineering, 2016. Model height is 1 m. This model contains 7 excitation positions going linearly from the bottom to the top of the bell. Obviously, a model with more excitation position could be regenerated using mesh2faust . This function also implement a virtual exciter to drive the model. Usage excitation : germanBell(strikePosition,strikeCutoff,strikeSharpness,gain,trigger) : _ Where: excitation : the excitation signal strikePosition : strike position (0-6) strikeCutoff : cuttoff frequency of the strike genarator (recommended: ~7000Hz) strikeSharpness : shaarpness of the strike (recommened: ~0.25) gain : gain of the strike (0-1) trigger signal (0: off, 1: on) (pm.)germanBell_ui German church bell physical model based on germanBell with built-in UI. Usage germanBell_ui : _ (pm.)russianBellModel Russian church bell modal model generated by mesh2faust from libraries/modalmodels/russianBell . Modeled after D. Bartocha and . Baron, Influence of Tin Bronze Melting and Pouring Parameters on Its Properties and Bell' Tone, Archives of Foundry Engineering, 2016. Model height is 2 m. This model contains 7 excitation positions going linearly from the bottom to the top of the bell. Obviously, a model with more excitation position could be regenerated using mesh2faust . Usage excitation : russianBellModel(nModes,exPos,t60,t60DecayRatio,t60DecaySlope) Where: excitation : the excitation signal nModes : number of synthesized modes (max: 50) exPos : excitation position (0-6) t60 : T60 in seconds (recommended value: 0.1) t60DecayRatio : T60 decay ratio (recommended value: 1) t60DecaySlope : T60 decay slope (recommended value: 5) (pm.)russianBell Russian church bell modal model. Modeled after D. Bartocha and . Baron, Influence of Tin Bronze Melting and Pouring Parameters on Its Properties and Bell' Tone, Archives of Foundry Engineering, 2016. Model height is 2 m. This model contains 7 excitation positions going linearly from the bottom to the top of the bell. Obviously, a model with more excitation position could be regenerated using mesh2faust . This function also implement a virtual exciter to drive the model. Usage excitation : russianBell(strikePosition,strikeCutoff,strikeSharpness,gain,trigger) : _ Where: excitation : the excitation signal strikePosition : strike position (0-6) strikeCutoff : cuttoff frequency of the strike genarator (recommended: ~7000Hz) strikeSharpness : shaarpness of the strike (recommened: ~0.25) gain : gain of the strike (0-1) trigger signal (0: off, 1: on) (pm.)russianBell_ui Russian church bell physical model based on russianBell with built-in UI. Usage russianBell_ui : _ (pm.)standardBellModel Standard church bell modal model generated by mesh2faust from libraries/modalmodels/standardBell . Modeled after T. Rossing and R. Perrin, Vibrations of Bells, Applied Acoustics 2, 1987. Model height is 1.8 m. This model contains 7 excitation positions going linearly from the bottom to the top of the bell. Obviously, a model with more excitation position could be regenerated using mesh2faust . Usage excitation : standardBellModel(nModes,exPos,t60,t60DecayRatio,t60DecaySlope) Where: excitation : the excitation signal nModes : number of synthesized modes (max: 50) exPos : excitation position (0-6) t60 : T60 in seconds (recommended value: 0.1) t60DecayRatio : T60 decay ratio (recommended value: 1) t60DecaySlope : T60 decay slope (recommended value: 5) (pm.)standardBell Standard church bell modal model. Modeled after T. Rossing and R. Perrin, Vibrations of Bells, Applied Acoustics 2, 1987. Model height is 1.8 m. This model contains 7 excitation positions going linearly from the bottom to the top of the bell. Obviously, a model with more excitation position could be regenerated using mesh2faust . This function also implement a virtual exciter to drive the model. Usage excitation : standardBell(strikePosition,strikeCutoff,strikeSharpness,gain,trigger) : _ Where: excitation : the excitation signal strikePosition : strike position (0-6) strikeCutoff : cuttoff frequency of the strike genarator (recommended: ~7000Hz) strikeSharpness : shaarpness of the strike (recommened: ~0.25) gain : gain of the strike (0-1) trigger signal (0: off, 1: on) (pm.)standardBell_ui Standard church bell physical model based on standardBell with built-in UI. Usage standardBell_ui : _ Vocal Synthesis Vocal synthesizer functions (source/filter, fof, etc.). (pm.)formantValues Formant data values. The formant data used here come from the CSOUND manual * http://www.csounds.com/manual/html/ . Usage ba.take(j+1,formantValues.f(i)) : _ ba.take(j+1,formantValues.g(i)) : _ ba.take(j+1,formantValues.bw(i)) : _ Where: i : formant number j : (voiceType*nFormants)+vowel voiceType : the voice type (0: alto, 1: bass, 2: countertenor, 3: soprano, 4: tenor) vowel : the vowel (0: a, 1: e, 2: i, 3: o, 4: u) (pm.)voiceGender Calculate the gender for the provided voiceType value. (0: male, 1: female) Usage voiceGender(voiceType) : _ Where: voiceType : the voice type (0: alto, 1: bass, 2: countertenor, 3: soprano, 4: tenor) (pm.)skirtWidthMultiplier Calculates value to multiply bandwidth to obtain skirtwidth for a Fof filter. Usage skirtWidthMultiplier(vowel,freq,gender) : _ Where: vowel : the vowel (0: a, 1: e, 2: i, 3: o, 4: u) freq : the fundamental frequency of the excitation signal gender : gender of the voice used in the fof filter (0: male, 1: female) (pm.)autobendFreq Autobends the center frequencies of formants 1 and 2 based on the fundamental frequency of the excitation signal and leaves all other formant frequencies unchanged. Ported from chant-lib . * Reference: https://ccrma.stanford.edu/~rmichon/chantLib/ . Usage _ : autobendFreq(n,freq,voiceType) : _ Where: n : formant index freq : the fundamental frequency of the excitation signal voiceType : the voice type (0: alto, 1: bass, 2: countertenor, input is the center frequency of the corresponding formant (pm.)vocalEffort Changes the gains of the formants based on the fundamental frequency of the excitation signal. Higher formants are reinforced for higher fundamental frequencies. Ported from chant-lib . * Reference: https://ccrma.stanford.edu/~rmichon/chantLib/ . Usage _ : vocalEffort(freq,gender) : _ Where: freq : the fundamental frequency of the excitation signal gender : the gender of the voice type (0: male, 1: female) input is the linear amplitude of the formant (pm.)fof Function to generate a single Formant-Wave-Function. * Reference: https://ccrma.stanford.edu/~mjolsen/pdfs/smc2016_MOlsenFOF.pdf . Usage _ : fof(fc,bw,a,g) : _ Where: fc : formant center frequency, bw : formant bandwidth (Hz), sw : formant skirtwidth (Hz) g : linear scale factor (g=1 gives 0dB amplitude response at fc) input is an impulse signal to excite filter (pm.)fofSH FOF with sample and hold used on bw and a parameter used in the filter-cycling FOF function fofCycle . * Reference: https://ccrma.stanford.edu/~mjolsen/pdfs/smc2016_MOlsenFOF.pdf . Usage _ : fofSH(fc,bw,a,g) : _ Where: all parameters same as for fof (pm.)fofCycle FOF implementation where time-varying filter parameter noise is mitigated by using a cycle of n sample and hold FOF filters. * Reference: https://ccrma.stanford.edu/~mjolsen/pdfs/smc2016_MOlsenFOF.pdf . Usage _ : fofCycle(fc,bw,a,g,n) : _ Where: n : the number of FOF filters to cycle through all other parameters are same as for fof (pm.)fofSmooth FOF implementation where time-varying filter parameter noise is mitigated by lowpass filtering the filter parameters bw and a with smooth . Usage _ : fofSmooth(fc,bw,sw,g,tau) : _ Where: tau : the desired smoothing time constant in seconds all other parameters are same as for fof (pm.)formantFilterFofCycle Formant filter based on a single FOF filter. Formant parameters are linearly interpolated allowing to go smoothly from one vowel to another. A cycle of n fof filters with sample-and-hold is used so that the fof filter parameters can be varied in realtime. This technique is more robust but more computationally expensive than formantFilterFofSmooth .Voice type can be selected but must correspond to the frequency range of the provided source to be realistic. Usage _ : formantFilterFofCycle(voiceType,vowel,nFormants,i,freq) : _ Where: voiceType : the voice type (0: alto, 1: bass, 2: countertenor, 3: soprano, 4: tenor) vowel : the vowel (0: a, 1: e, 2: i, 3: o, 4: u) nFormants : number of formant regions in frequency domain, typically 5 i : formant number (i.e. 0 - 4) used to index formant data value arrays freq : fundamental frequency of excitation signal. Used to calculate rise time of envelope (pm.)formantFilterFofSmooth Formant filter based on a single FOF filter. Formant parameters are linearly interpolated allowing to go smoothly from one vowel to another. Fof filter parameters are lowpass filtered to mitigate possible noise from varying them in realtime. Voice type can be selected but must correspond to the frequency range of the provided source to be realistic. Usage _ : formantFilterFofSmooth(voiceType,vowel,nFormants,i,freq) : _ Where: voiceType : the voice type (0: alto, 1: bass, 2: countertenor, 3: soprano, 4: tenor) vowel : the vowel (0: a, 1: e, 2: i, 3: o, 4: u) nFormants : number of formant regions in frequency domain, typically 5 i : formant number (i.e. 1 - 5) used to index formant data value arrays freq : fundamental frequency of excitation signal. Used to calculate rise time of envelope (pm.)formantFilterBP Formant filter based on a single resonant bandpass filter. Formant parameters are linearly interpolated allowing to go smoothly from one vowel to another. Voice type can be selected but must correspond to the frequency range of the provided source to be realistic. Usage _ : formantFilterBP(voiceType,vowel,nFormants,i,freq) : _ Where: voiceType : the voice type (0: alto, 1: bass, 2: countertenor, 3: soprano, 4: tenor) vowel : the vowel (0: a, 1: e, 2: i, 3: o, 4: u) nFormants : number of formant regions in frequency domain, typically 5 i : formant index used to index formant data value arrays freq : fundamental frequency of excitation signal. (pm.)formantFilterbank Formant filterbank which can use different types of filterbank functions and different excitation signals. Formant parameters are linearly interpolated allowing to go smoothly from one vowel to another. Voice type can be selected but must correspond to the frequency range of the provided source to be realistic. Usage _ : formantFilterbank(voiceType,vowel,formantGen,freq) : _ Where: voiceType : the voice type (0: alto, 1: bass, 2: countertenor, 3: soprano, 4: tenor) vowel : the vowel (0: a, 1: e, 2: i, 3: o, 4: u) formantGen : the specific formant filterbank function (i.e. FormantFilterbankBP, FormantFilterbankFof,...) freq : fundamental frequency of excitation signal. Needed for FOF version to calculate rise time of envelope (pm.)formantFilterbankFofCycle Formant filterbank based on a bank of fof filters. Formant parameters are linearly interpolated allowing to go smoothly from one vowel to another. Voice type can be selected but must correspond to the frequency range of the provided source to be realistic. Usage _ : formantFilterbankFofCycle(voiceType,vowel,freq) : _ Where: voiceType : the voice type (0: alto, 1: bass, 2: countertenor, 3: soprano, 4: tenor) vowel : the vowel (0: a, 1: e, 2: i, 3: o, 4: u) freq : the fundamental frequency of the excitation signal. Needed to (pm.)formantFilterbankFofSmooth Formant filterbank based on a bank of fof filters. Formant parameters are linearly interpolated allowing to go smoothly from one vowel to another. Voice type can be selected but must correspond to the frequency range of the provided source to be realistic. Usage _ : formantFilterbankFofSmooth(voiceType,vowel,freq) : _ Where: voiceType : the voice type (0: alto, 1: bass, 2: countertenor, 3: soprano, 4: tenor) vowel : the vowel (0: a, 1: e, 2: i, 3: o, 4: u) freq : the fundamental frequency of the excitation signal. Needed to (pm.)formantFilterbankBP Formant filterbank based on a bank of resonant bandpass filters. Formant parameters are linearly interpolated allowing to go smoothly from one vowel to another. Voice type can be selected but must correspond to the frequency range of the provided source to be realistic. Usage _ : formantFilterbankBP(voiceType,vowel) : _ Where: voiceType : the voice type (0: alto, 1: bass, 2: countertenor, 3: soprano, 4: tenor) vowel : the vowel (0: a, 1: e, 2: i, 3: o, 4: u) freq : the fundamental frequency of the excitation signal. Needed (pm.)SFFormantModel Simple formant/vocal synthesizer based on a source/filter model. The source and filterbank must be specified by the user. filterbank must take the same input parameters as formantFilterbank ( BP / FofCycle / FofSmooth ). Formant parameters are linearly interpolated allowing to go smoothly from one vowel to another. Voice type can be selected but must correspond to the frequency range of the synthesized voice to be realistic. Usage SFFormantModel(voiceType,vowel,exType,freq,gain,source,filterbank,isFof) : _ Where: voiceType : the voice type (0: alto, 1: bass, 2: countertenor, 3: soprano, 4: tenor) vowel : the vowel (0: a, 1: e, 2: i, 3: o, 4: u exType : voice vs. fricative sound ratio (0-1 where 1 is 100% fricative) freq : the fundamental frequency of the source signal gain : linear gain multiplier to multiply the source by isFof : whether model is FOF based (0: no, 1: yes) (pm.)SFFormantModelFofCycle Simple formant/vocal synthesizer based on a source/filter model. The source is just a periodic impulse and the \"filter\" is a bank of FOF filters. Formant parameters are linearly interpolated allowing to go smoothly from one vowel to another. Voice type can be selected but must correspond to the frequency range of the synthesized voice to be realistic. This model does not work with noise in the source signal so exType has been removed and model does not depend on SFFormantModel function. Usage SFFormantModelFofCycle(voiceType,vowel,freq,gain) : _ Where: voiceType : the voice type (0: alto, 1: bass, 2: countertenor, 3: soprano, 4: tenor) vowel : the vowel (0: a, 1: e, 2: i, 3: o, 4: u freq : the fundamental frequency of the source signal gain : linear gain multiplier to multiply the source by (pm.)SFFormantModelFofSmooth Simple formant/vocal synthesizer based on a source/filter model. The source is just a periodic impulse and the \"filter\" is a bank of FOF filters. Formant parameters are linearly interpolated allowing to go smoothly from one vowel to another. Voice type can be selected but must correspond to the frequency range of the synthesized voice to be realistic. Usage SFFormantModelFofSmooth(voiceType,vowel,freq,gain) : _ Where: voiceType : the voice type (0: alto, 1: bass, 2: countertenor, 3: soprano, 4: tenor) vowel : the vowel (0: a, 1: e, 2: i, 3: o, 4: u freq : the fundamental frequency of the source signal gain : linear gain multiplier to multiply the source by (pm.)SFFormantModelBP Simple formant/vocal synthesizer based on a source/filter model. The source is just a sawtooth wave and the \"filter\" is a bank of resonant bandpass filters. Formant parameters are linearly interpolated allowing to go smoothly from one vowel to another. Voice type can be selected but must correspond to the frequency range of the synthesized voice to be realistic. The formant data used here come from the CSOUND manual * http://www.csounds.com/manual/html/ . Usage SFFormantModelBP(voiceType,vowel,exType,freq,gain) : _ Where: voiceType : the voice type (0: alto, 1: bass, 2: countertenor, 3: soprano, 4: tenor) vowel : the vowel (0: a, 1: e, 2: i, 3: o, 4: u exType : voice vs. fricative sound ratio (0-1 where 1 is 100% fricative) freq : the fundamental frequency of the source signal gain : linear gain multiplier to multiply the source by (pm.)SFFormantModelFofCycle_ui Ready-to-use source-filter vocal synthesizer with built-in user interface. Usage SFFormantModelFofCycle_ui : _ (pm.)SFFormantModelFofSmooth_ui Ready-to-use source-filter vocal synthesizer with built-in user interface. Usage SFFormantModelFofSmooth_ui : _ (pm.)SFFormantModelBP_ui Ready-to-use source-filter vocal synthesizer with built-in user interface. Usage SFFormantModelBP_ui : _ (pm.)SFFormantModelFofCycle_ui_MIDI Ready-to-use MIDI-controllable source-filter vocal synthesizer. Usage SFFormantModelFofCycle_ui_MIDI : _ (pm.)SFFormantModelFofSmooth_ui_MIDI Ready-to-use MIDI-controllable source-filter vocal synthesizer. Usage SFFormantModelFofSmooth_ui_MIDI : _ (pm.)SFFormantModelBP_ui_MIDI Ready-to-use MIDI-controllable source-filter vocal synthesizer. Usage SFFormantModelBP_ui_MIDI : _ Misc Functions Various miscellaneous functions. (pm.)allpassNL Bidirectional block adding nonlinearities in both directions in a chain. Nonlinearities are created by modulating the coefficients of a passive allpass filter by the signal it is processing. Usage chain(... : allpassNL(nonlinearity) : ...) Where: nonlinearity : amount of nonlinearity to be added (0-1) modalModel Implement multiple resonance modes using resonant bandpass filters. Usage _ : modalModel(n, freqs, t60s, gains) : _ Where: n : number of given modes freqs : list of filter center freqencies t60s : list of mode resonance durations (in seconds) gains : list of mode gains (0-1) For example, to generate a model with 2 modes (440 Hz and 660 Hz, a fifth) where the higher one decays faster and is attenuated: os.impulse : modalModel(2, (440, 660), (0.5, 0.25), (ba.db2linear(-1), ba.db2linear(-6)) : _ Further reading: Grumiaux et. al., 2017: Impulse-Response and CAD-Model-Based Physical Modeling in Faust","title":" physmodels "},{"location":"libs/physmodels/#physmodelslib","text":"Faust physical modeling library. Its official prefix is pm . This library provides an environment to facilitate physical modeling of musical instruments. It contains dozens of functions implementing low and high level elements going from a simple waveguide to fully operational models with built-in UI, etc. It is organized as follows: Global Variables : useful pre-defined variables for physical modeling (e.g., speed of sound, etc.). Conversion Tools : conversion functions specific to physical modeling (e.g., length to frequency, etc.). Bidirectional Utilities : functions to create bidirectional block diagrams for physical modeling. Basic Elements : waveguides, specific types of filters, etc. String Instruments : various types of strings (e.g., steel, nylon, etc.), bridges, guitars, etc. Bowed String Instruments : parts and models specific to bowed string instruments (e.g., bows, bridges, violins, etc.). Wind Instrument : parts and models specific to wind string instruments (e.g., reeds, mouthpieces, flutes, clarinets, etc.). Exciters : pluck generators, \"blowers\", etc. Modal Percussions : percussion instruments based on modal models. Vocal Synthesis : functions for various vocal synthesis techniques (e.g., fof, source/filter, etc.) and vocal synthesizers. Misc Functions : any other functions that don't fit in the previous category (e.g., nonlinear filters, etc.). This library is part of the Faust Physical Modeling ToolKit. More information on how to use this library can be found on this page: * https://ccrma.stanford.edu/~rmichon/pmFaust . Tutorials on how to make physical models of musical instruments using Faust can be found here as well.","title":"physmodels.lib"},{"location":"libs/physmodels/#global-variables","text":"Useful pre-defined variables for physical modeling.","title":"Global Variables"},{"location":"libs/physmodels/#pmspeedofsound","text":"Speed of sound in meters per second (340m/s).","title":"(pm.)speedOfSound"},{"location":"libs/physmodels/#pmmaxlength","text":"The default maximum length (3) in meters of strings and tubes used in this library. This variable should be overriden to allow longer strings or tubes.","title":"(pm.)maxLength"},{"location":"libs/physmodels/#conversion-tools","text":"Useful conversion tools for physical modeling.","title":"Conversion Tools"},{"location":"libs/physmodels/#pmf2l","text":"Frequency to length in meters.","title":"(pm.)f2l"},{"location":"libs/physmodels/#usage","text":"f2l(freq) : distanceInMeters Where: freq : the frequency","title":"Usage"},{"location":"libs/physmodels/#pml2f","text":"Length in meters to frequency.","title":"(pm.)l2f"},{"location":"libs/physmodels/#usage_1","text":"l2f(length) : freq Where: length : length/distance in meters","title":"Usage"},{"location":"libs/physmodels/#pml2s","text":"Length in meters to number of samples.","title":"(pm.)l2s"},{"location":"libs/physmodels/#usage_2","text":"l2s(l) : numberOfSamples Where: l : length in meters","title":"Usage"},{"location":"libs/physmodels/#bidirectional-utilities","text":"Set of fundamental functions to create bi-directional block diagrams in Faust. These elements are used as the basis of this library to connect high level elements (e.g., mouthpieces, strings, bridge, instrument body, etc.). Each block has 3 inputs and 3 outputs. The first input/output carry left going waves, the second input/output carry right going waves, and the third input/output is used to carry any potential output signal to the end of the algorithm.","title":"Bidirectional Utilities"},{"location":"libs/physmodels/#pmbasicblock","text":"Empty bidirectional block to be used with chain : 3 signals ins and 3 signals out.","title":"(pm.)basicBlock"},{"location":"libs/physmodels/#usage_3","text":"chain(basicBlock : basicBlock : etc.)","title":"Usage"},{"location":"libs/physmodels/#pmchain","text":"Creates a chain of bidirectional blocks. Blocks must have 3 inputs and outputs. The first input/output carry left going waves, the second input/output carry right going waves, and the third input/output is used to carry any potential output signal to the end of the algorithm. The implied one sample delay created by the ~ operator is generalized to the left and right going waves. Thus, n blocks in chain() will add an n samples delay to both left and right going waves.","title":"(pm.)chain"},{"location":"libs/physmodels/#usage_4","text":"leftGoingWaves,rightGoingWaves,mixedOutput : chain( A : B ) : leftGoingWaves,rightGoingWaves,mixedOutput with{ A = _,_,_; };","title":"Usage"},{"location":"libs/physmodels/#pminleftwave","text":"Adds a signal to left going waves anywhere in a chain of blocks.","title":"(pm.)inLeftWave"},{"location":"libs/physmodels/#usage_5","text":"model(x) = chain(A : inLeftWave(x) : B) Where A and B are bidirectional blocks and x is the signal added to left going waves in that chain.","title":"Usage"},{"location":"libs/physmodels/#pminrightwave","text":"Adds a signal to right going waves anywhere in a chain of blocks.","title":"(pm.)inRightWave"},{"location":"libs/physmodels/#usage_6","text":"model(x) = chain(A : inRightWave(x) : B) Where A and B are bidirectional blocks and x is the signal added to right going waves in that chain.","title":"Usage"},{"location":"libs/physmodels/#pmin","text":"Adds a signal to left and right going waves anywhere in a chain of blocks.","title":"(pm.)in"},{"location":"libs/physmodels/#usage_7","text":"model(x) = chain(A : in(x) : B) Where A and B are bidirectional blocks and x is the signal added to left and right going waves in that chain.","title":"Usage"},{"location":"libs/physmodels/#pmoutleftwave","text":"Sends the signal of left going waves to the output channel of the chain .","title":"(pm.)outLeftWave"},{"location":"libs/physmodels/#usage_8","text":"chain(A : outLeftWave : B) Where A and B are bidirectional blocks.","title":"Usage"},{"location":"libs/physmodels/#pmoutrightwave","text":"Sends the signal of right going waves to the output channel of the chain .","title":"(pm.)outRightWave"},{"location":"libs/physmodels/#usage_9","text":"chain(A : outRightWave : B) Where A and B are bidirectional blocks.","title":"Usage"},{"location":"libs/physmodels/#pmout","text":"Sends the signal of right and left going waves to the output channel of the chain .","title":"(pm.)out"},{"location":"libs/physmodels/#usage_10","text":"chain(A : out : B) Where A and B are bidirectional blocks.","title":"Usage"},{"location":"libs/physmodels/#pmterminations","text":"Creates terminations on both sides of a chain without closing the inputs and outputs of the bidirectional signals chain. As for chain , this function adds a 1 sample delay to the bidirectional signal, both ways. Of course, this function can be nested within a chain .","title":"(pm.)terminations"},{"location":"libs/physmodels/#usage_11","text":"terminations(a,b,c) with{ };","title":"Usage"},{"location":"libs/physmodels/#pmltermination","text":"Creates a termination on the left side of a chain without closing the inputs and outputs of the bidirectional signals chain. This function adds a 1 sample delay near the termination and can be nested within another chain .","title":"(pm.)lTermination"},{"location":"libs/physmodels/#usage_12","text":"lTerminations(a,b) with{ };","title":"Usage"},{"location":"libs/physmodels/#pmrtermination","text":"Creates a termination on the right side of a chain without closing the inputs and outputs of the bidirectional signals chain. This function adds a 1 sample delay near the termination and can be nested within another chain .","title":"(pm.)rTermination"},{"location":"libs/physmodels/#usage_13","text":"rTerminations(b,c) with{ };","title":"Usage"},{"location":"libs/physmodels/#pmcloseins","text":"Closes the inputs of a bidirectional chain in all directions.","title":"(pm.)closeIns"},{"location":"libs/physmodels/#usage_14","text":"closeIns : chain(...) : _,_,_","title":"Usage"},{"location":"libs/physmodels/#pmcloseouts","text":"Closes the outputs of a bidirectional chain in all directions except for the main signal output (3d output).","title":"(pm.)closeOuts"},{"location":"libs/physmodels/#usage_15","text":"_,_,_ : chain(...) : _","title":"Usage"},{"location":"libs/physmodels/#pmendchain","text":"Closes the inputs and outputs of a bidirectional chain in all directions except for the main signal output (3d output).","title":"(pm.)endChain"},{"location":"libs/physmodels/#usage_16","text":"endChain(chain(...)) : _","title":"Usage"},{"location":"libs/physmodels/#basic-elements","text":"Basic elements for physical modeling (e.g., waveguides, specific filters, etc.).","title":"Basic Elements"},{"location":"libs/physmodels/#pmwaveguiden","text":"A series of waveguide functions based on various types of delays (see fdelay[n] ).","title":"(pm.)waveguideN"},{"location":"libs/physmodels/#list-of-functions","text":"waveguideUd : unit delay waveguide waveguideFd : fractional delay waveguide waveguideFd2 : second order fractional delay waveguide waveguideFd4 : fourth order fractional delay waveguide","title":"List of functions"},{"location":"libs/physmodels/#usage_17","text":"chain(A : waveguideUd(nMax,n) : B) Where: nMax : the maximum length of the delays in the waveguide n : the length of the delay lines in samples.","title":"Usage"},{"location":"libs/physmodels/#pmwaveguide","text":"Standard pm.lib waveguide (based on waveguideFd4 ).","title":"(pm.)waveguide"},{"location":"libs/physmodels/#usage_18","text":"chain(A : waveguide(nMax,n) : B) Where: nMax : the maximum length of the delays in the waveguide n : the length of the delay lines in samples.","title":"Usage"},{"location":"libs/physmodels/#pmbridgefilter","text":"Generic two zeros bridge FIR filter (as implemented in the STK ) that can be used to implement the reflectance violin, guitar, etc. bridges.","title":"(pm.)bridgeFilter"},{"location":"libs/physmodels/#usage_19","text":"_ : bridge(brightness,absorption) : _ Where: brightness : controls the damping of high frequencies (0-1) absorption : controls the absorption of the brige and thus the t60 of the string plugged to it (0-1) (1 = 20 seconds)","title":"Usage"},{"location":"libs/physmodels/#pmmodefilter","text":"Resonant bandpass filter that can be used to implement a single resonance (mode).","title":"(pm.)modeFilter"},{"location":"libs/physmodels/#usage_20","text":"_ : modeFilter(freq,t60,gain) : _ Where: freq : mode frequency t60 : mode resonance duration (in seconds) gain : mode gain (0-1)","title":"Usage"},{"location":"libs/physmodels/#string-instruments","text":"Low and high level string instruments parts. Most of the elements in this section can be used in a bidirectional chain.","title":"String Instruments"},{"location":"libs/physmodels/#pmstringsegment","text":"A string segment without terminations (just a simple waveguide).","title":"(pm.)stringSegment"},{"location":"libs/physmodels/#usage_21","text":"chain(A : stringSegment(maxLength,length) : B) Where: maxLength : the maximum length of the string in meters (should be static) length : the length of the string in meters","title":"Usage"},{"location":"libs/physmodels/#pmopenstring","text":"A bidirectional block implementing a basic \"generic\" string with a selectable excitation position. Lowpass filters are built-in and allow to simulate the effect of dispersion on the sound and thus to change the \"stiffness\" of the string.","title":"(pm.)openString"},{"location":"libs/physmodels/#usage_22","text":"chain(... : openString(length,stiffness,pluckPosition,excitation) : ...) Where: length : the length of the string in meters stiffness : the stiffness of the string (0-1) (1 for max stiffness) pluckPosition : excitation position (0-1) (1 is bottom) excitation : the excitation signal","title":"Usage"},{"location":"libs/physmodels/#pmnylonstring","text":"A bidirectional block implementing a basic nylon string with selectable excitation position. This element is based on openString and has a fix stiffness corresponding to that of a nylon string.","title":"(pm.)nylonString"},{"location":"libs/physmodels/#usage_23","text":"chain(... : nylonString(length,pluckPosition,excitation) : ...) Where: length : the length of the string in meters pluckPosition : excitation position (0-1) (1 is bottom) excitation : the excitation signal","title":"Usage"},{"location":"libs/physmodels/#pmsteelstring","text":"A bidirectional block implementing a basic steel string with selectable excitation position. This element is based on openString and has a fix stiffness corresponding to that of a steel string.","title":"(pm.)steelString"},{"location":"libs/physmodels/#usage_24","text":"chain(... : steelString(length,pluckPosition,excitation) : ...) Where: length : the length of the string in meters pluckPosition : excitation position (0-1) (1 is bottom) excitation : the excitation signal","title":"Usage"},{"location":"libs/physmodels/#pmopenstringpick","text":"A bidirectional block implementing a \"generic\" string with selectable excitation position. It also has a built-in pickup whose position is the same as the excitation position. Thus, moving the excitation position will also move the pickup.","title":"(pm.)openStringPick"},{"location":"libs/physmodels/#usage_25","text":"chain(... : openStringPick(length,stiffness,pluckPosition,excitation) : ...) Where: length : the length of the string in meters stiffness : the stiffness of the string (0-1) (1 for max stiffness) pluckPosition : excitation position (0-1) (1 is bottom) excitation : the excitation signal","title":"Usage"},{"location":"libs/physmodels/#pmopenstringpickup","text":"A bidirectional block implementing a \"generic\" string with selectable excitation position and stiffness. It also has a built-in pickup whose position can be independenly selected. The only constraint is that the pickup has to be placed after the excitation position.","title":"(pm.)openStringPickUp"},{"location":"libs/physmodels/#usage_26","text":"chain(... : openStringPickUp(length,stiffness,pluckPosition,excitation) : ...) Where: length : the length of the string in meters stiffness : the stiffness of the string (0-1) (1 for max stiffness) pluckPosition : pluck position between the top of the string and the pickup (0-1) (1 for same as pickup position) pickupPosition : position of the pickup on the string (0-1) (1 is bottom) excitation : the excitation signal","title":"Usage"},{"location":"libs/physmodels/#pmopenstringpickdown","text":"A bidirectional block implementing a \"generic\" string with selectable excitation position and stiffness. It also has a built-in pickup whose position can be independenly selected. The only constraint is that the pickup has to be placed before the excitation position.","title":"(pm.)openStringPickDown"},{"location":"libs/physmodels/#usage_27","text":"chain(... : openStringPickDown(length,stiffness,pluckPosition,excitation) : ...) Where: length : the length of the string in meters stiffness : the stiffness of the string (0-1) (1 for max stiffness) pluckPosition : pluck position on the string (0-1) (1 is bottom) pickupPosition : position of the pickup between the top of the string and the excitation position (0-1) (1 is excitation position) excitation : the excitation signal","title":"Usage"},{"location":"libs/physmodels/#pmksreflexionfilter","text":"The \"typical\" one-zero Karplus-strong feedforward reflexion filter. This filter will be typically used in a termination (see below).","title":"(pm.)ksReflexionFilter"},{"location":"libs/physmodels/#usage_28","text":"terminations(_,chain(...),ksReflexionFilter)","title":"Usage"},{"location":"libs/physmodels/#pmrstringrigidtermination","text":"Bidirectional block implementing a right rigid string termination (no damping, just phase inversion).","title":"(pm.)rStringRigidTermination"},{"location":"libs/physmodels/#usage_29","text":"chain(rStringRigidTermination : stringSegment : ...)","title":"Usage"},{"location":"libs/physmodels/#pmlstringrigidtermination","text":"Bidirectional block implementing a left rigid string termination (no damping, just phase inversion).","title":"(pm.)lStringRigidTermination"},{"location":"libs/physmodels/#usage_30","text":"chain(... : stringSegment : lStringRigidTermination)","title":"Usage"},{"location":"libs/physmodels/#pmelecguitarbridge","text":"Bidirectional block implementing a simple electric guitar bridge. This block is based on bridgeFilter . The bridge doesn't implement transmittance since it is not meant to be connected to a body (unlike acoustic guitar). It also partially sets the resonance duration of the string with the nuts used on the other side.","title":"(pm.)elecGuitarBridge"},{"location":"libs/physmodels/#usage_31","text":"chain(... : stringSegment : elecGuitarBridge)","title":"Usage"},{"location":"libs/physmodels/#pmelecguitarnuts","text":"Bidirectional block implementing a simple electric guitar nuts. This block is based on bridgeFilter and does essentially the same thing as elecGuitarBridge , but on the other side of the chain. It also partially sets the resonance duration of the string with the bridge used on the other side.","title":"(pm.)elecGuitarNuts"},{"location":"libs/physmodels/#usage_32","text":"chain(elecGuitarNuts : stringSegment : ...)","title":"Usage"},{"location":"libs/physmodels/#pmguitarbridge","text":"Bidirectional block implementing a simple acoustic guitar bridge. This bridge damps more hight frequencies than elecGuitarBridge and implements a transmittance filter. It also partially sets the resonance duration of the string with the nuts used on the other side.","title":"(pm.)guitarBridge"},{"location":"libs/physmodels/#usage_33","text":"chain(... : stringSegment : guitarBridge)","title":"Usage"},{"location":"libs/physmodels/#pmguitarnuts","text":"Bidirectional block implementing a simple acoustic guitar nuts. This nuts damps more hight frequencies than elecGuitarNuts and implements a transmittance filter. It also partially sets the resonance duration of the string with the bridge used on the other side.","title":"(pm.)guitarNuts"},{"location":"libs/physmodels/#usage_34","text":"chain(guitarNuts : stringSegment : ...)","title":"Usage"},{"location":"libs/physmodels/#pmidealstring","text":"An \"ideal\" string with rigid terminations and where the plucking position and the pick-up position are the same. Since terminations are rigid, this string will ring forever.","title":"(pm.)idealString"},{"location":"libs/physmodels/#usage_35","text":"1-1' : idealString(length,reflexion,xPosition,excitation) With: * length : the length of the string in meters * pluckPosition : the plucking position (0.001-0.999) * excitation : the input signal for the excitation.","title":"Usage"},{"location":"libs/physmodels/#pmks","text":"A Karplus-Strong string (in that case, the string is implemented as a one dimension waveguide).","title":"(pm.)ks"},{"location":"libs/physmodels/#usage_36","text":"ks(length,damping,excitation) : _ Where: length : the length of the string in meters damping : string damping (0-1) excitation : excitation signal","title":"Usage"},{"location":"libs/physmodels/#pmks_ui_midi","text":"Ready-to-use, MIDI-enabled Karplus-Strong string with buil-in UI.","title":"(pm.)ks_ui_MIDI"},{"location":"libs/physmodels/#usage_37","text":"ks_ui_MIDI : _","title":"Usage"},{"location":"libs/physmodels/#pmelecguitarmodel","text":"A simple electric guitar model (without audio effects, of course) with selectable pluck position. This model implements a single string. Additional strings should be created by making a polyphonic applications out of this function. Pitch is changed by changing the length of the string and not through a finger model.","title":"(pm.)elecGuitarModel"},{"location":"libs/physmodels/#usage_38","text":"elecGuitarModel(length,pluckPosition,mute,excitation) : _ Where: length : the length of the string in meters pluckPosition : pluck position (0-1) (1 is on the bridge) mute : mute coefficient (1 for no mute and 0 for instant mute) excitation : excitation signal","title":"Usage"},{"location":"libs/physmodels/#pmelecguitar","text":"A simple electric guitar model with steel strings (based on elecGuitarModel ) implementing an excitation model. This model implements a single string. Additional strings should be created by making a polyphonic applications out of this function.","title":"(pm.)elecGuitar"},{"location":"libs/physmodels/#usage_39","text":"elecGuitar(length,pluckPosition,trigger) : _ Where: length : the length of the string in meters pluckPosition : pluck position (0-1) (1 is on the bridge) mute : mute coefficient (1 for no mute and 0 for instant mute) gain : gain of the pluck (0-1) trigger : trigger signal (1 for on, 0 for off)","title":"Usage"},{"location":"libs/physmodels/#pmelecguitar_ui_midi","text":"Ready-to-use MIDI-enabled electric guitar physical model with built-in UI.","title":"(pm.)elecGuitar_ui_MIDI"},{"location":"libs/physmodels/#usage_40","text":"elecGuitar_ui_MIDI : _","title":"Usage"},{"location":"libs/physmodels/#pmguitarbody","text":"WARNING: not implemented yet! Bidirectional block implementing a simple acoustic guitar body.","title":"(pm.)guitarBody"},{"location":"libs/physmodels/#usage_41","text":"chain(... : guitarBody)","title":"Usage"},{"location":"libs/physmodels/#pmguitarmodel","text":"A simple acoustic guitar model with steel strings and selectable excitation position. This model implements a single string. Additional strings should be created by making a polyphonic applications out of this function. Pitch is changed by changing the length of the string and not through a finger model. WARNING: this function doesn't currently implement a body (just strings and bridge).","title":"(pm.)guitarModel"},{"location":"libs/physmodels/#usage_42","text":"guitarModel(length,pluckPosition,excitation) : _ Where: length : the length of the string in meters pluckPosition : pluck position (0-1) (1 is on the bridge) excitation : excitation signal","title":"Usage"},{"location":"libs/physmodels/#pmguitar","text":"A simple acoustic guitar model with steel strings (based on guitarModel ) implementing an excitation model. This model implements a single string. Additional strings should be created by making a polyphonic applications out of this function.","title":"(pm.)guitar"},{"location":"libs/physmodels/#usage_43","text":"guitar(length,pluckPosition,trigger) : _ Where: length : the length of the string in meters pluckPosition : pluck position (0-1) (1 is on the bridge) gain : gain of the excitation trigger : trigger signal (1 for on, 0 for off)","title":"Usage"},{"location":"libs/physmodels/#pmguitar_ui_midi","text":"Ready-to-use MIDI-enabled steel strings acoustic guitar physical model with built-in UI.","title":"(pm.)guitar_ui_MIDI"},{"location":"libs/physmodels/#usage_44","text":"guitar_ui_MIDI : _","title":"Usage"},{"location":"libs/physmodels/#pmnylonguitarmodel","text":"A simple acoustic guitar model with nylon strings and selectable excitation position. This model implements a single string. Additional strings should be created by making a polyphonic applications out of this function. Pitch is changed by changing the length of the string and not through a finger model. WARNING: this function doesn't currently implement a body (just strings and bridge).","title":"(pm.)nylonGuitarModel"},{"location":"libs/physmodels/#usage_45","text":"nylonGuitarModel(length,pluckPosition,excitation) : _ Where: length : the length of the string in meters pluckPosition : pluck position (0-1) (1 is on the bridge) excitation : excitation signal","title":"Usage"},{"location":"libs/physmodels/#pmnylonguitar","text":"A simple acoustic guitar model with nylon strings (based on nylonGuitarModel ) implementing an excitation model. This model implements a single string. Additional strings should be created by making a polyphonic applications out of this function.","title":"(pm.)nylonGuitar"},{"location":"libs/physmodels/#usage_46","text":"nylonGuitar(length,pluckPosition,trigger) : _ Where: length : the length of the string in meters pluckPosition : pluck position (0-1) (1 is on the bridge) gain : gain of the excitation (0-1) trigger : trigger signal (1 for on, 0 for off)","title":"Usage"},{"location":"libs/physmodels/#pmnylonguitar_ui_midi","text":"Ready-to-use MIDI-enabled nylon strings acoustic guitar physical model with built-in UI.","title":"(pm.)nylonGuitar_ui_MIDI"},{"location":"libs/physmodels/#usage_47","text":"nylonGuitar_ui_MIDI : _","title":"Usage"},{"location":"libs/physmodels/#pmmodeinterpres","text":"Modular string instrument resonator based on IR measurements made on 3D printed models. The 2D space allowing for the control of the shape and the scale of the model is enabled by interpolating between modes parameters. More information about this technique/project can be found here: * https://ccrma.stanford.edu/~rmichon/3dPrintingModeling/ .","title":"(pm.)modeInterpRes"},{"location":"libs/physmodels/#usage_48","text":"_ : modeInterpRes(nModes,x,y) : _ Where: nModes : number of modeled modes (40 max) x : shape of the resonator (0: square, 1: square with rounded corners, 2: round) y : scale of the resonator (0: small, 1: medium, 2: large)","title":"Usage"},{"location":"libs/physmodels/#pmmodularinterpbody","text":"Bidirectional block implementing a modular string instrument resonator (see modeInterpRes ).","title":"(pm.)modularInterpBody"},{"location":"libs/physmodels/#usage_49","text":"chain(... : modularInterpBody(nModes,shape,scale) : ...) Where: nModes : number of modeled modes (40 max) shape : shape of the resonator (0: square, 1: square with rounded corners, 2: round) scale : scale of the resonator (0: small, 1: medium, 2: large)","title":"Usage"},{"location":"libs/physmodels/#pmmodularinterpstringmodel","text":"String instrument model with a modular body (see modeInterpRes and * https://ccrma.stanford.edu/~rmichon/3dPrintingModeling/ ).","title":"(pm.)modularInterpStringModel"},{"location":"libs/physmodels/#usage_50","text":"modularInterpStringModel(length,pluckPosition,shape,scale,bodyExcitation,stringExcitation) : _ Where: stringLength : the length of the string in meters pluckPosition : pluck position (0-1) (1 is on the bridge) shape : shape of the resonator (0: square, 1: square with rounded corners, 2: round) scale : scale of the resonator (0: small, 1: medium, 2: large) bodyExcitation : excitation signal for the body stringExcitation : excitation signal for the string","title":"Usage"},{"location":"libs/physmodels/#pmmodularinterpinstr","text":"String instrument with a modular body (see modeInterpRes and * https://ccrma.stanford.edu/~rmichon/3dPrintingModeling/ ).","title":"(pm.)modularInterpInstr"},{"location":"libs/physmodels/#usage_51","text":"modularInterpInstr(stringLength,pluckPosition,shape,scale,gain,tapBody,triggerString) : _ Where: stringLength : the length of the string in meters pluckPosition : pluck position (0-1) (1 is on the bridge) shape : shape of the resonator (0: square, 1: square with rounded corners, 2: round) scale : scale of the resonator (0: small, 1: medium, 2: large) gain : of the string excitation tapBody : send an impulse in the body of the instrument where the string is connected (1 for on, 0 for off) triggerString : trigger signal for the string (1 for on, 0 for off)","title":"Usage"},{"location":"libs/physmodels/#pmmodularinterpinstr_ui_midi","text":"Ready-to-use MIDI-enabled string instrument with a modular body (see modeInterpRes and * https://ccrma.stanford.edu/~rmichon/3dPrintingModeling/ ) with built-in UI.","title":"(pm.)modularInterpInstr_ui_MIDI"},{"location":"libs/physmodels/#usage_52","text":"modularInterpInstr_ui_MIDI : _","title":"Usage"},{"location":"libs/physmodels/#bowed-string-instruments","text":"Low and high level basic string instruments parts. Most of the elements in this section can be used in a bidirectional chain.","title":"Bowed String Instruments"},{"location":"libs/physmodels/#pmbowtable","text":"Extremely basic bow table that can be used to implement a wide range of bow types for many different bowed string instruments (violin, cello, etc.).","title":"(pm.)bowTable"},{"location":"libs/physmodels/#usage_53","text":"excitation : bowTable(offeset,slope) : _ Where: excitation : an excitation signal offset : table offset slope : table slope","title":"Usage"},{"location":"libs/physmodels/#pmviolinbowtable","text":"Violin bow table based on bowTable .","title":"(pm.)violinBowTable"},{"location":"libs/physmodels/#usage_54","text":"bowVelocity : violinBowTable(bowPressure) : _ Where: bowVelocity : velocity of the bow/excitation signal (0-1) bowPressure : bow pressure on the string (0-1)","title":"Usage"},{"location":"libs/physmodels/#pmbowinteraction","text":"Bidirectional block implementing the interaction of a bow in a chain .","title":"(pm.)bowInteraction"},{"location":"libs/physmodels/#usage_55","text":"chain(... : stringSegment : bowInteraction(bowTable) : stringSegment : ...) Where: bowTable : the bow table","title":"Usage"},{"location":"libs/physmodels/#pmviolinbow","text":"Bidirectional block implementing a violin bow and its interaction with a string.","title":"(pm.)violinBow"},{"location":"libs/physmodels/#usage_56","text":"chain(... : stringSegment : violinBow(bowPressure,bowVelocity) : stringSegment : ...) Where: bowVelocity : velocity of the bow / excitation signal (0-1) bowPressure : bow pressure on the string (0-1)","title":"Usage"},{"location":"libs/physmodels/#pmviolinbowedstring","text":"Violin bowed string bidirectional block with controllable bow position. Terminations are not implemented in this model.","title":"(pm.)violinBowedString"},{"location":"libs/physmodels/#usage_57","text":"chain(nuts : violinBowedString(stringLength,bowPressure,bowVelocity,bowPosition) : bridge) Where: stringLength : the length of the string in meters bowVelocity : velocity of the bow / excitation signal (0-1) bowPressure : bow pressure on the string (0-1) bowPosition : the position of the bow on the string (0-1)","title":"Usage"},{"location":"libs/physmodels/#pmviolinnuts","text":"Bidirectional block implementing simple violin nuts. This function is based on bridgeFilter .","title":"(pm.)violinNuts"},{"location":"libs/physmodels/#usage_58","text":"chain(violinNuts : stringSegment : ...)","title":"Usage"},{"location":"libs/physmodels/#pmviolinbridge","text":"Bidirectional block implementing a simple violin bridge. This function is based on bridgeFilter .","title":"(pm.)violinBridge"},{"location":"libs/physmodels/#usage_59","text":"chain(... : stringSegment : violinBridge","title":"Usage"},{"location":"libs/physmodels/#pmviolinbody","text":"Bidirectional block implementing a simple violin body (just a simple resonant lowpass filter).","title":"(pm.)violinBody"},{"location":"libs/physmodels/#usage_60","text":"chain(... : stringSegment : violinBridge : violinBody)","title":"Usage"},{"location":"libs/physmodels/#pmviolinmodel","text":"Ready-to-use simple violin physical model. This model implements a single string. Additional strings should be created by making a polyphonic applications out of this function. Pitch is changed by changing the length of the string (and not through a finger model).","title":"(pm.)violinModel"},{"location":"libs/physmodels/#usage_61","text":"violinModel(stringLength,bowPressure,bowVelocity,bridgeReflexion, bridgeAbsorption,bowPosition) : _ Where: stringLength : the length of the string in meters bowVelocity : velocity of the bow / excitation signal (0-1) bowPressure : bow pressure on the string (0-1)) bowPosition : the position of the bow on the string (0-1)","title":"Usage"},{"location":"libs/physmodels/#pmviolin_ui","text":"Ready-to-use violin physical model with built-in UI.","title":"(pm.)violin_ui"},{"location":"libs/physmodels/#usage_62","text":"violinModel_ui : _","title":"Usage"},{"location":"libs/physmodels/#pmviolin_ui_midi","text":"Ready-to-use MIDI-enabled violin physical model with built-in UI.","title":"(pm.)violin_ui_MIDI"},{"location":"libs/physmodels/#usage_63","text":"violin_ui_MIDI : _","title":"Usage"},{"location":"libs/physmodels/#wind-instruments","text":"Low and high level basic wind instruments parts. Most of the elements in this section can be used in a bidirectional chain.","title":"Wind Instruments"},{"location":"libs/physmodels/#pmopentube","text":"A tube segment without terminations (same as stringSegment ).","title":"(pm.)openTube"},{"location":"libs/physmodels/#usage_64","text":"chain(A : openTube(maxLength,length) : B) Where: maxLength : the maximum length of the tube in meters (should be static) length : the length of the tube in meters","title":"Usage"},{"location":"libs/physmodels/#pmreedtable","text":"Extremely basic reed table that can be used to implement a wide range of single reed types for many different instruments (saxophone, clarinet, etc.).","title":"(pm.)reedTable"},{"location":"libs/physmodels/#usage_65","text":"excitation : reedTable(offeset,slope) : _ Where: excitation : an excitation signal offset : table offset slope : table slope","title":"Usage"},{"location":"libs/physmodels/#pmflutejettable","text":"Extremely basic flute jet table.","title":"(pm.)fluteJetTable"},{"location":"libs/physmodels/#usage_66","text":"excitation : fluteJetTable : _ Where: excitation : an excitation signal","title":"Usage"},{"location":"libs/physmodels/#pmbrasslipstable","text":"Simple brass lips/mouthpiece table. Since this implementation is very basic and that the lips and tube of the instrument are coupled to each other, the length of that tube must be provided here.","title":"(pm.)brassLipsTable"},{"location":"libs/physmodels/#usage_67","text":"excitation : brassLipsTable(tubeLength,lipsTension) : _ Where: excitation : an excitation signal (can be DC) tubeLength : length in meters of the tube connected to the mouthpiece lipsTension : tension of the lips (0-1) (default: 0.5)","title":"Usage"},{"location":"libs/physmodels/#pmclarinetreed","text":"Clarinet reed based on reedTable with controllable stiffness.","title":"(pm.)clarinetReed"},{"location":"libs/physmodels/#usage_68","text":"excitation : clarinetReed(stiffness) : _ Where: excitation : an excitation signal stiffness : reed stiffness (0-1)","title":"Usage"},{"location":"libs/physmodels/#pmclarinetmouthpiece","text":"Bidirectional block implementing a clarinet mouthpiece as well as the various interactions happening with traveling waves. This element is ready to be plugged to a tube...","title":"(pm.)clarinetMouthPiece"},{"location":"libs/physmodels/#usage_69","text":"chain(clarinetMouthPiece(reedStiffness,pressure) : tube : etc.) Where: pressure : the pressure of the air flow (DC) created by the virtual performer (0-1). This can also be any kind of signal that will directly injected in the mouthpiece (e.g., breath noise, etc.). reedStiffness : reed stiffness (0-1)","title":"Usage"},{"location":"libs/physmodels/#pmbrasslips","text":"Bidirectional block implementing a brass mouthpiece as well as the various interactions happening with traveling waves. This element is ready to be plugged to a tube...","title":"(pm.)brassLips"},{"location":"libs/physmodels/#usage_70","text":"chain(brassLips(tubeLength,lipsTension,pressure) : tube : etc.) Where: tubeLength : length in meters of the tube connected to the mouthpiece lipsTension : tension of the lips (0-1) (default: 0.5) pressure : the pressure of the air flow (DC) created by the virtual performer (0-1). This can also be any kind of signal that will directly injected in the mouthpiece (e.g., breath noise, etc.).","title":"Usage"},{"location":"libs/physmodels/#pmfluteembouchure","text":"Bidirectional block implementing a flute embouchure as well as the various interactions happening with traveling waves. This element is ready to be plugged between tubes segments...","title":"(pm.)fluteEmbouchure"},{"location":"libs/physmodels/#usage_71","text":"chain(... : tube : fluteEmbouchure(pressure) : tube : etc.) Where: pressure : the pressure of the air flow (DC) created by the virtual performer (0-1). This can also be any kind of signal that will directly injected in the mouthpiece (e.g., breath noise, etc.).","title":"Usage"},{"location":"libs/physmodels/#pmwbell","text":"Generic wind instrument bell bidirectional block that should be placed at the end of a chain .","title":"(pm.)wBell"},{"location":"libs/physmodels/#usage_72","text":"chain(... : wBell(opening)) Where: opening : the \"opening\" of bell (0-1)","title":"Usage"},{"location":"libs/physmodels/#pmflutehead","text":"Simple flute head implementing waves reflexion.","title":"(pm.)fluteHead"},{"location":"libs/physmodels/#usage_73","text":"chain(fluteHead : tube : ...)","title":"Usage"},{"location":"libs/physmodels/#pmflutefoot","text":"Simple flute foot implementing waves reflexion and dispersion.","title":"(pm.)fluteFoot"},{"location":"libs/physmodels/#usage_74","text":"chain(... : tube : fluteFoot)","title":"Usage"},{"location":"libs/physmodels/#pmclarinetmodel","text":"A simple clarinet physical model without tone holes (pitch is changed by changing the length of the tube of the instrument).","title":"(pm.)clarinetModel"},{"location":"libs/physmodels/#usage_75","text":"clarinetModel(length,pressure,reedStiffness,bellOpening) : _ Where: tubeLength : the length of the tube in meters pressure : the pressure of the air flow created by the virtual performer (0-1). This can also be any kind of signal that will directly injected in the mouthpiece (e.g., breath noise, etc.). reedStiffness : reed stiffness (0-1) bellOpening : the opening of bell (0-1)","title":"Usage"},{"location":"libs/physmodels/#pmclarinetmodel_ui","text":"Same as clarinetModel but with a built-in UI. This function doesn't implement a virtual \"blower\", thus pressure remains an argument here.","title":"(pm.)clarinetModel_ui"},{"location":"libs/physmodels/#usage_76","text":"clarinetModel_ui(pressure) : _ Where: pressure : the pressure of the air flow created by the virtual performer (0-1). This can also be any kind of signal that will be directly injected in the mouthpiece (e.g., breath noise, etc.).","title":"Usage"},{"location":"libs/physmodels/#pmclarinet_ui","text":"Ready-to-use clarinet physical model with built-in UI based on clarinetModel .","title":"(pm.)clarinet_ui"},{"location":"libs/physmodels/#usage_77","text":"clarinet_ui : _","title":"Usage"},{"location":"libs/physmodels/#pmclarinet_ui_midi","text":"Ready-to-use MIDI compliant clarinet physical model with built-in UI.","title":"(pm.)clarinet_ui_MIDI"},{"location":"libs/physmodels/#usage_78","text":"clarinet_ui_MIDI : _","title":"Usage"},{"location":"libs/physmodels/#pmbrassmodel","text":"A simple generic brass instrument physical model without pistons (pitch is changed by changing the length of the tube of the instrument). This model is kind of hard to control and might not sound very good if bad parameters are given to it...","title":"(pm.)brassModel"},{"location":"libs/physmodels/#usage_79","text":"brassModel(tubeLength,lipsTension,mute,pressure) : _ Where: tubeLength : the length of the tube in meters lipsTension : tension of the lips (0-1) (default: 0.5) mute : mute opening at the end of the instrument (0-1) (default: 0.5) pressure : the pressure of the air flow created by the virtual performer (0-1). This can also be any kind of signal that will directly injected in the mouthpiece (e.g., breath noise, etc.).","title":"Usage"},{"location":"libs/physmodels/#pmbrassmodel_ui","text":"Same as brassModel but with a built-in UI. This function doesn't implement a virtual \"blower\", thus pressure remains an argument here.","title":"(pm.)brassModel_ui"},{"location":"libs/physmodels/#usage_80","text":"brassModel_ui(pressure) : _ Where: pressure : the pressure of the air flow created by the virtual performer (0-1). This can also be any kind of signal that will be directly injected in the mouthpiece (e.g., breath noise, etc.).","title":"Usage"},{"location":"libs/physmodels/#pmbrass_ui","text":"Ready-to-use brass instrument physical model with built-in UI based on brassModel .","title":"(pm.)brass_ui"},{"location":"libs/physmodels/#usage_81","text":"brass_ui : _","title":"Usage"},{"location":"libs/physmodels/#pmbrass_ui_midi","text":"Ready-to-use MIDI-controllable brass instrument physical model with built-in UI.","title":"(pm.)brass_ui_MIDI"},{"location":"libs/physmodels/#usage_82","text":"brass_ui_MIDI : _","title":"Usage"},{"location":"libs/physmodels/#pmflutemodel","text":"A simple generic flute instrument physical model without tone holes (pitch is changed by changing the length of the tube of the instrument).","title":"(pm.)fluteModel"},{"location":"libs/physmodels/#usage_83","text":"fluteModel(tubeLength,mouthPosition,pressure) : _ Where: tubeLength : the length of the tube in meters mouthPosition : position of the mouth on the embouchure (0-1) (default: 0.5) pressure : the pressure of the air flow created by the virtual performer (0-1). This can also be any kind of signal that will directly injected in the mouthpiece (e.g., breath noise, etc.).","title":"Usage"},{"location":"libs/physmodels/#pmflutemodel_ui","text":"Same as fluteModel but with a built-in UI. This function doesn't implement a virtual \"blower\", thus pressure remains an argument here.","title":"(pm.)fluteModel_ui"},{"location":"libs/physmodels/#usage_84","text":"fluteModel_ui(pressure) : _ Where: pressure : the pressure of the air flow created by the virtual performer (0-1). This can also be any kind of signal that will be directly injected in the mouthpiece (e.g., breath noise, etc.).","title":"Usage"},{"location":"libs/physmodels/#pmflute_ui","text":"Ready-to-use flute physical model with built-in UI based on fluteModel .","title":"(pm.)flute_ui"},{"location":"libs/physmodels/#usage_85","text":"flute_ui : _","title":"Usage"},{"location":"libs/physmodels/#pmflute_ui_midi","text":"Ready-to-use MIDI-controllable flute physical model with built-in UI.","title":"(pm.)flute_ui_MIDI"},{"location":"libs/physmodels/#usage_86","text":"flute_ui_MIDI : _","title":"Usage"},{"location":"libs/physmodels/#exciters","text":"Various kind of excitation signal generators.","title":"Exciters"},{"location":"libs/physmodels/#pmimpulseexcitation","text":"Creates an impulse excitation of one sample.","title":"(pm.)impulseExcitation"},{"location":"libs/physmodels/#usage_87","text":"gate = button('gate'); impulseExcitation(gate) : chain; Where: gate : a gate button","title":"Usage"},{"location":"libs/physmodels/#pmstrikemodel","text":"Creates a filtered noise excitation.","title":"(pm.)strikeModel"},{"location":"libs/physmodels/#usage_88","text":"gate = button('gate'); strikeModel(LPcutoff,HPcutoff,sharpness,gain,gate) : chain; Where: HPcutoff : highpass cutoff frequency LPcutoff : lowpass cutoff frequency sharpness : sharpness of the attack and release (0-1) gain : gain of the excitation gate : a gate button/trigger signal (0/1)","title":"Usage"},{"location":"libs/physmodels/#pmstrike","text":"Strikes generator with controllable excitation position.","title":"(pm.)strike"},{"location":"libs/physmodels/#usage_89","text":"gate = button('gate'); strike(exPos,sharpness,gain,gate) : chain; Where: exPos : excitation position wiht 0: for max low freqs and 1: for max high freqs. So, on membrane for example, 0 would be the middle and 1 the edge sharpness : sharpness of the attack and release (0-1) gain : gain of the excitation gate : a gate button/trigger signal (0/1)","title":"Usage"},{"location":"libs/physmodels/#pmpluckstring","text":"Creates a plucking excitation signal.","title":"(pm.)pluckString"},{"location":"libs/physmodels/#usage_90","text":"trigger = button('gate'); pluckString(stringLength,cutoff,maxFreq,sharpness,trigger) Where: stringLength : length of the string to pluck cutoff : cutoff ratio (1 for default) maxFreq : max frequency ratio (1 for default) sharpness : sharpness of the attack and release (1 for default) gain : gain of the excitation (0-1) trigger : trigger signal (1 for on, 0 for off)","title":"Usage"},{"location":"libs/physmodels/#pmblower","text":"A virtual blower creating a DC signal with some breath noise in it.","title":"(pm.)blower"},{"location":"libs/physmodels/#usage_91","text":"blower(pressure,breathGain,breathCutoff) : _ Where: pressure : pressure (0-1) breathGain : breath noise gain (0-1) (recommended: 0.005) breathCutoff : breath cuttoff frequency (Hz) (recommended: 2000)","title":"Usage"},{"location":"libs/physmodels/#pmblower_ui","text":"Same as blower but with a built-in UI.","title":"(pm.)blower_ui"},{"location":"libs/physmodels/#usage_92","text":"blower : somethingToBeBlown","title":"Usage"},{"location":"libs/physmodels/#modal-percussions","text":"High and low level functions for modal synthesis of percussion instruments.","title":"Modal Percussions"},{"location":"libs/physmodels/#pmdjembemodel","text":"Dirt-simple djembe modal physical model. Mode parameters are empirically calculated and don't correspond to any measurements or 3D model. They kind of sound good though :).","title":"(pm.)djembeModel"},{"location":"libs/physmodels/#usage_93","text":"excitation : djembeModel(freq) Where: excitation : excitation signal freq : fundamental frequency of the bar","title":"Usage"},{"location":"libs/physmodels/#pmdjembe","text":"Dirt-simple djembe modal physical model. Mode parameters are empirically calculated and don't correspond to any measurements or 3D model. They kind of sound good though :). This model also implements a virtual \"exciter\".","title":"(pm.)djembe"},{"location":"libs/physmodels/#usage_94","text":"djembe(freq,strikePosition,strikeSharpness,gain,trigger) Where: freq : fundamental frequency of the model strikePosition : strike position (0 for the middle of the membrane and 1 for the edge) strikeSharpness : sharpness of the strike (0-1, default: 0.5) gain : gain of the strike trigger : trigger signal (0: off, 1: on)","title":"Usage"},{"location":"libs/physmodels/#pmdjembe_ui_midi","text":"Simple MIDI controllable djembe physical model with built-in UI.","title":"(pm.)djembe_ui_MIDI"},{"location":"libs/physmodels/#usage_95","text":"djembe_ui_MIDI : _","title":"Usage"},{"location":"libs/physmodels/#pmmarimbabarmodel","text":"Generic marimba tone bar modal model. This model was generated using mesh2faust from a 3D CAD model of a marimba tone bar ( libraries/modalmodels/marimbaBar ). The corresponding CAD model is that of a C2 tone bar (original fundamental frequency: ~65Hz). While marimbaBarModel allows to translate the harmonic content of the generated sound by providing a frequency ( freq ), mode transposition has limits and the model will sound less and less like a marimba tone bar as it diverges from C2. To make an accurate model of a marimba, we'd want to have an independent model for each bar... This model contains 5 excitation positions going linearly from the center bottom to the center top of the bar. Obviously, a model with more excitation position could be regenerated using mesh2faust .","title":"(pm.)marimbaBarModel"},{"location":"libs/physmodels/#usage_96","text":"excitation : marimbaBarModel(freq,exPos,t60,t60DecayRatio,t60DecaySlope) Where: excitation : excitation signal freq : fundamental frequency of the bar exPos : excitation position (0-4) t60 : T60 in seconds (recommended value: 0.1) t60DecayRatio : T60 decay ratio (recommended value: 1) t60DecaySlope : T60 decay slope (recommended value: 5)","title":"Usage"},{"location":"libs/physmodels/#pmmarimbarestube","text":"Simple marimba resonance tube.","title":"(pm.)marimbaResTube"},{"location":"libs/physmodels/#usage_97","text":"marimbaResTube(tubeLength,excitation) Where: tubeLength : the length of the tube in meters excitation : the excitation signal (audio in)","title":"Usage"},{"location":"libs/physmodels/#pmmarimbamodel","text":"Simple marimba physical model implementing a single tone bar connected to tube. This model is scalable and can be adapted to any size of bar/tube (see marimbaBarModel to know more about the limitations of this type of system).","title":"(pm.)marimbaModel"},{"location":"libs/physmodels/#usage_98","text":"excitation : marimbaModel(freq,exPos) : _ Where: freq : the frequency of the bar/tube couple exPos : excitation position (0-4)","title":"Usage"},{"location":"libs/physmodels/#pmmarimba","text":"Simple marimba physical model implementing a single tone bar connected to tube. This model is scalable and can be adapted to any size of bar/tube (see marimbaBarModel to know more about the limitations of this type of system). This function also implement a virtual exciter to drive the model.","title":"(pm.)marimba"},{"location":"libs/physmodels/#usage_99","text":"excitation : marimba(freq,strikePosition,strikeCutoff,strikeSharpness,gain,trigger) : _ Where: excitation : the excitation signal freq : the frequency of the bar/tube couple strikePosition : strike position (0-4) strikeCutoff : cuttoff frequency of the strike genarator (recommended: ~7000Hz) strikeSharpness : shaarpness of the strike (recommened: ~0.25) gain : gain of the strike (0-1) trigger signal (0: off, 1: on)","title":"Usage"},{"location":"libs/physmodels/#pmmarimba_ui_midi","text":"Simple MIDI controllable marimba physical model with built-in UI implementing a single tone bar connected to tube. This model is scalable and can be adapted to any size of bar/tube (see marimbaBarModel to know more about the limitations of this type of system).","title":"(pm.)marimba_ui_MIDI"},{"location":"libs/physmodels/#usage_100","text":"marimba_ui_MIDI : _","title":"Usage"},{"location":"libs/physmodels/#pmchurchbellmodel","text":"Generic church bell modal model generated by mesh2faust from libraries/modalmodels/churchBell . Modeled after T. Rossing and R. Perrin, Vibrations of Bells, Applied Acoustics 2, 1987. Model height is 301 mm. This model contains 7 excitation positions going linearly from the bottom to the top of the bell. Obviously, a model with more excitation position could be regenerated using mesh2faust .","title":"(pm.)churchBellModel"},{"location":"libs/physmodels/#usage_101","text":"excitation : churchBellModel(nModes,exPos,t60,t60DecayRatio,t60DecaySlope) Where: excitation : the excitation signal nModes : number of synthesized modes (max: 50) exPos : excitation position (0-6) t60 : T60 in seconds (recommended value: 0.1) t60DecayRatio : T60 decay ratio (recommended value: 1) t60DecaySlope : T60 decay slope (recommended value: 5)","title":"Usage"},{"location":"libs/physmodels/#pmchurchbell","text":"Generic church bell modal model. Modeled after T. Rossing and R. Perrin, Vibrations of Bells, Applied Acoustics 2, 1987. Model height is 301 mm. This model contains 7 excitation positions going linearly from the bottom to the top of the bell. Obviously, a model with more excitation position could be regenerated using mesh2faust . This function also implement a virtual exciter to drive the model.","title":"(pm.)churchBell"},{"location":"libs/physmodels/#usage_102","text":"excitation : churchBell(strikePosition,strikeCutoff,strikeSharpness,gain,trigger) : _ Where: excitation : the excitation signal strikePosition : strike position (0-6) strikeCutoff : cuttoff frequency of the strike genarator (recommended: ~7000Hz) strikeSharpness : shaarpness of the strike (recommened: ~0.25) gain : gain of the strike (0-1) trigger signal (0: off, 1: on)","title":"Usage"},{"location":"libs/physmodels/#pmchurchbell_ui","text":"Church bell physical model based on churchBell with built-in UI.","title":"(pm.)churchBell_ui"},{"location":"libs/physmodels/#usage_103","text":"churchBell_ui : _","title":"Usage"},{"location":"libs/physmodels/#pmenglishbellmodel","text":"English church bell modal model generated by mesh2faust from libraries/modalmodels/englishBell . Modeled after D. Bartocha and . Baron, Influence of Tin Bronze Melting and Pouring Parameters on Its Properties and Bell' Tone, Archives of Foundry Engineering, 2016. Model height is 1 m. This model contains 7 excitation positions going linearly from the bottom to the top of the bell. Obviously, a model with more excitation position could be regenerated using mesh2faust .","title":"(pm.)englishBellModel"},{"location":"libs/physmodels/#usage_104","text":"excitation : englishBellModel(nModes,exPos,t60,t60DecayRatio,t60DecaySlope) Where: excitation : the excitation signal nModes : number of synthesized modes (max: 50) exPos : excitation position (0-6) t60 : T60 in seconds (recommended value: 0.1) t60DecayRatio : T60 decay ratio (recommended value: 1) t60DecaySlope : T60 decay slope (recommended value: 5)","title":"Usage"},{"location":"libs/physmodels/#pmenglishbell","text":"English church bell modal model. Modeled after D. Bartocha and . Baron, Influence of Tin Bronze Melting and Pouring Parameters on Its Properties and Bell' Tone, Archives of Foundry Engineering, 2016. Model height is 1 m. This model contains 7 excitation positions going linearly from the bottom to the top of the bell. Obviously, a model with more excitation position could be regenerated using mesh2faust . This function also implement a virtual exciter to drive the model.","title":"(pm.)englishBell"},{"location":"libs/physmodels/#usage_105","text":"excitation : englishBell(strikePosition,strikeCutoff,strikeSharpness,gain,trigger) : _ Where: excitation : the excitation signal strikePosition : strike position (0-6) strikeCutoff : cuttoff frequency of the strike genarator (recommended: ~7000Hz) strikeSharpness : shaarpness of the strike (recommened: ~0.25) gain : gain of the strike (0-1) trigger signal (0: off, 1: on)","title":"Usage"},{"location":"libs/physmodels/#pmenglishbell_ui","text":"English church bell physical model based on englishBell with built-in UI.","title":"(pm.)englishBell_ui"},{"location":"libs/physmodels/#usage_106","text":"englishBell_ui : _","title":"Usage"},{"location":"libs/physmodels/#pmfrenchbellmodel","text":"French church bell modal model generated by mesh2faust from libraries/modalmodels/frenchBell . Modeled after D. Bartocha and . Baron, Influence of Tin Bronze Melting and Pouring Parameters on Its Properties and Bell' Tone, Archives of Foundry Engineering, 2016. Model height is 1 m. This model contains 7 excitation positions going linearly from the bottom to the top of the bell. Obviously, a model with more excitation position could be regenerated using mesh2faust .","title":"(pm.)frenchBellModel"},{"location":"libs/physmodels/#usage_107","text":"excitation : frenchBellModel(nModes,exPos,t60,t60DecayRatio,t60DecaySlope) Where: excitation : the excitation signal nModes : number of synthesized modes (max: 50) exPos : excitation position (0-6) t60 : T60 in seconds (recommended value: 0.1) t60DecayRatio : T60 decay ratio (recommended value: 1) t60DecaySlope : T60 decay slope (recommended value: 5)","title":"Usage"},{"location":"libs/physmodels/#pmfrenchbell","text":"French church bell modal model. Modeled after D. Bartocha and . Baron, Influence of Tin Bronze Melting and Pouring Parameters on Its Properties and Bell' Tone, Archives of Foundry Engineering, 2016. Model height is 1 m. This model contains 7 excitation positions going linearly from the bottom to the top of the bell. Obviously, a model with more excitation position could be regenerated using mesh2faust . This function also implement a virtual exciter to drive the model.","title":"(pm.)frenchBell"},{"location":"libs/physmodels/#usage_108","text":"excitation : frenchBell(strikePosition,strikeCutoff,strikeSharpness,gain,trigger) : _ Where: excitation : the excitation signal strikePosition : strike position (0-6) strikeCutoff : cuttoff frequency of the strike genarator (recommended: ~7000Hz) strikeSharpness : shaarpness of the strike (recommened: ~0.25) gain : gain of the strike (0-1) trigger signal (0: off, 1: on)","title":"Usage"},{"location":"libs/physmodels/#pmfrenchbell_ui","text":"French church bell physical model based on frenchBell with built-in UI.","title":"(pm.)frenchBell_ui"},{"location":"libs/physmodels/#usage_109","text":"frenchBell_ui : _","title":"Usage"},{"location":"libs/physmodels/#pmgermanbellmodel","text":"German church bell modal model generated by mesh2faust from libraries/modalmodels/germanBell . Modeled after D. Bartocha and . Baron, Influence of Tin Bronze Melting and Pouring Parameters on Its Properties and Bell' Tone, Archives of Foundry Engineering, 2016. Model height is 1 m. This model contains 7 excitation positions going linearly from the bottom to the top of the bell. Obviously, a model with more excitation position could be regenerated using mesh2faust .","title":"(pm.)germanBellModel"},{"location":"libs/physmodels/#usage_110","text":"excitation : germanBellModel(nModes,exPos,t60,t60DecayRatio,t60DecaySlope) Where: excitation : the excitation signal nModes : number of synthesized modes (max: 50) exPos : excitation position (0-6) t60 : T60 in seconds (recommended value: 0.1) t60DecayRatio : T60 decay ratio (recommended value: 1) t60DecaySlope : T60 decay slope (recommended value: 5)","title":"Usage"},{"location":"libs/physmodels/#pmgermanbell","text":"German church bell modal model. Modeled after D. Bartocha and . Baron, Influence of Tin Bronze Melting and Pouring Parameters on Its Properties and Bell' Tone, Archives of Foundry Engineering, 2016. Model height is 1 m. This model contains 7 excitation positions going linearly from the bottom to the top of the bell. Obviously, a model with more excitation position could be regenerated using mesh2faust . This function also implement a virtual exciter to drive the model.","title":"(pm.)germanBell"},{"location":"libs/physmodels/#usage_111","text":"excitation : germanBell(strikePosition,strikeCutoff,strikeSharpness,gain,trigger) : _ Where: excitation : the excitation signal strikePosition : strike position (0-6) strikeCutoff : cuttoff frequency of the strike genarator (recommended: ~7000Hz) strikeSharpness : shaarpness of the strike (recommened: ~0.25) gain : gain of the strike (0-1) trigger signal (0: off, 1: on)","title":"Usage"},{"location":"libs/physmodels/#pmgermanbell_ui","text":"German church bell physical model based on germanBell with built-in UI.","title":"(pm.)germanBell_ui"},{"location":"libs/physmodels/#usage_112","text":"germanBell_ui : _","title":"Usage"},{"location":"libs/physmodels/#pmrussianbellmodel","text":"Russian church bell modal model generated by mesh2faust from libraries/modalmodels/russianBell . Modeled after D. Bartocha and . Baron, Influence of Tin Bronze Melting and Pouring Parameters on Its Properties and Bell' Tone, Archives of Foundry Engineering, 2016. Model height is 2 m. This model contains 7 excitation positions going linearly from the bottom to the top of the bell. Obviously, a model with more excitation position could be regenerated using mesh2faust .","title":"(pm.)russianBellModel"},{"location":"libs/physmodels/#usage_113","text":"excitation : russianBellModel(nModes,exPos,t60,t60DecayRatio,t60DecaySlope) Where: excitation : the excitation signal nModes : number of synthesized modes (max: 50) exPos : excitation position (0-6) t60 : T60 in seconds (recommended value: 0.1) t60DecayRatio : T60 decay ratio (recommended value: 1) t60DecaySlope : T60 decay slope (recommended value: 5)","title":"Usage"},{"location":"libs/physmodels/#pmrussianbell","text":"Russian church bell modal model. Modeled after D. Bartocha and . Baron, Influence of Tin Bronze Melting and Pouring Parameters on Its Properties and Bell' Tone, Archives of Foundry Engineering, 2016. Model height is 2 m. This model contains 7 excitation positions going linearly from the bottom to the top of the bell. Obviously, a model with more excitation position could be regenerated using mesh2faust . This function also implement a virtual exciter to drive the model.","title":"(pm.)russianBell"},{"location":"libs/physmodels/#usage_114","text":"excitation : russianBell(strikePosition,strikeCutoff,strikeSharpness,gain,trigger) : _ Where: excitation : the excitation signal strikePosition : strike position (0-6) strikeCutoff : cuttoff frequency of the strike genarator (recommended: ~7000Hz) strikeSharpness : shaarpness of the strike (recommened: ~0.25) gain : gain of the strike (0-1) trigger signal (0: off, 1: on)","title":"Usage"},{"location":"libs/physmodels/#pmrussianbell_ui","text":"Russian church bell physical model based on russianBell with built-in UI.","title":"(pm.)russianBell_ui"},{"location":"libs/physmodels/#usage_115","text":"russianBell_ui : _","title":"Usage"},{"location":"libs/physmodels/#pmstandardbellmodel","text":"Standard church bell modal model generated by mesh2faust from libraries/modalmodels/standardBell . Modeled after T. Rossing and R. Perrin, Vibrations of Bells, Applied Acoustics 2, 1987. Model height is 1.8 m. This model contains 7 excitation positions going linearly from the bottom to the top of the bell. Obviously, a model with more excitation position could be regenerated using mesh2faust .","title":"(pm.)standardBellModel"},{"location":"libs/physmodels/#usage_116","text":"excitation : standardBellModel(nModes,exPos,t60,t60DecayRatio,t60DecaySlope) Where: excitation : the excitation signal nModes : number of synthesized modes (max: 50) exPos : excitation position (0-6) t60 : T60 in seconds (recommended value: 0.1) t60DecayRatio : T60 decay ratio (recommended value: 1) t60DecaySlope : T60 decay slope (recommended value: 5)","title":"Usage"},{"location":"libs/physmodels/#pmstandardbell","text":"Standard church bell modal model. Modeled after T. Rossing and R. Perrin, Vibrations of Bells, Applied Acoustics 2, 1987. Model height is 1.8 m. This model contains 7 excitation positions going linearly from the bottom to the top of the bell. Obviously, a model with more excitation position could be regenerated using mesh2faust . This function also implement a virtual exciter to drive the model.","title":"(pm.)standardBell"},{"location":"libs/physmodels/#usage_117","text":"excitation : standardBell(strikePosition,strikeCutoff,strikeSharpness,gain,trigger) : _ Where: excitation : the excitation signal strikePosition : strike position (0-6) strikeCutoff : cuttoff frequency of the strike genarator (recommended: ~7000Hz) strikeSharpness : shaarpness of the strike (recommened: ~0.25) gain : gain of the strike (0-1) trigger signal (0: off, 1: on)","title":"Usage"},{"location":"libs/physmodels/#pmstandardbell_ui","text":"Standard church bell physical model based on standardBell with built-in UI.","title":"(pm.)standardBell_ui"},{"location":"libs/physmodels/#usage_118","text":"standardBell_ui : _","title":"Usage"},{"location":"libs/physmodels/#vocal-synthesis","text":"Vocal synthesizer functions (source/filter, fof, etc.).","title":"Vocal Synthesis"},{"location":"libs/physmodels/#pmformantvalues","text":"Formant data values. The formant data used here come from the CSOUND manual * http://www.csounds.com/manual/html/ .","title":"(pm.)formantValues"},{"location":"libs/physmodels/#usage_119","text":"ba.take(j+1,formantValues.f(i)) : _ ba.take(j+1,formantValues.g(i)) : _ ba.take(j+1,formantValues.bw(i)) : _ Where: i : formant number j : (voiceType*nFormants)+vowel voiceType : the voice type (0: alto, 1: bass, 2: countertenor, 3: soprano, 4: tenor) vowel : the vowel (0: a, 1: e, 2: i, 3: o, 4: u)","title":"Usage"},{"location":"libs/physmodels/#pmvoicegender","text":"Calculate the gender for the provided voiceType value. (0: male, 1: female)","title":"(pm.)voiceGender"},{"location":"libs/physmodels/#usage_120","text":"voiceGender(voiceType) : _ Where: voiceType : the voice type (0: alto, 1: bass, 2: countertenor, 3: soprano, 4: tenor)","title":"Usage"},{"location":"libs/physmodels/#pmskirtwidthmultiplier","text":"Calculates value to multiply bandwidth to obtain skirtwidth for a Fof filter.","title":"(pm.)skirtWidthMultiplier"},{"location":"libs/physmodels/#usage_121","text":"skirtWidthMultiplier(vowel,freq,gender) : _ Where: vowel : the vowel (0: a, 1: e, 2: i, 3: o, 4: u) freq : the fundamental frequency of the excitation signal gender : gender of the voice used in the fof filter (0: male, 1: female)","title":"Usage"},{"location":"libs/physmodels/#pmautobendfreq","text":"Autobends the center frequencies of formants 1 and 2 based on the fundamental frequency of the excitation signal and leaves all other formant frequencies unchanged. Ported from chant-lib . * Reference: https://ccrma.stanford.edu/~rmichon/chantLib/ .","title":"(pm.)autobendFreq"},{"location":"libs/physmodels/#usage_122","text":"_ : autobendFreq(n,freq,voiceType) : _ Where: n : formant index freq : the fundamental frequency of the excitation signal voiceType : the voice type (0: alto, 1: bass, 2: countertenor, input is the center frequency of the corresponding formant","title":"Usage"},{"location":"libs/physmodels/#pmvocaleffort","text":"Changes the gains of the formants based on the fundamental frequency of the excitation signal. Higher formants are reinforced for higher fundamental frequencies. Ported from chant-lib . * Reference: https://ccrma.stanford.edu/~rmichon/chantLib/ .","title":"(pm.)vocalEffort"},{"location":"libs/physmodels/#usage_123","text":"_ : vocalEffort(freq,gender) : _ Where: freq : the fundamental frequency of the excitation signal gender : the gender of the voice type (0: male, 1: female) input is the linear amplitude of the formant","title":"Usage"},{"location":"libs/physmodels/#pmfof","text":"Function to generate a single Formant-Wave-Function. * Reference: https://ccrma.stanford.edu/~mjolsen/pdfs/smc2016_MOlsenFOF.pdf .","title":"(pm.)fof"},{"location":"libs/physmodels/#usage_124","text":"_ : fof(fc,bw,a,g) : _ Where: fc : formant center frequency, bw : formant bandwidth (Hz), sw : formant skirtwidth (Hz) g : linear scale factor (g=1 gives 0dB amplitude response at fc) input is an impulse signal to excite filter","title":"Usage"},{"location":"libs/physmodels/#pmfofsh","text":"FOF with sample and hold used on bw and a parameter used in the filter-cycling FOF function fofCycle . * Reference: https://ccrma.stanford.edu/~mjolsen/pdfs/smc2016_MOlsenFOF.pdf .","title":"(pm.)fofSH"},{"location":"libs/physmodels/#usage_125","text":"_ : fofSH(fc,bw,a,g) : _ Where: all parameters same as for fof","title":"Usage"},{"location":"libs/physmodels/#pmfofcycle","text":"FOF implementation where time-varying filter parameter noise is mitigated by using a cycle of n sample and hold FOF filters. * Reference: https://ccrma.stanford.edu/~mjolsen/pdfs/smc2016_MOlsenFOF.pdf .","title":"(pm.)fofCycle"},{"location":"libs/physmodels/#usage_126","text":"_ : fofCycle(fc,bw,a,g,n) : _ Where: n : the number of FOF filters to cycle through all other parameters are same as for fof","title":"Usage"},{"location":"libs/physmodels/#pmfofsmooth","text":"FOF implementation where time-varying filter parameter noise is mitigated by lowpass filtering the filter parameters bw and a with smooth .","title":"(pm.)fofSmooth"},{"location":"libs/physmodels/#usage_127","text":"_ : fofSmooth(fc,bw,sw,g,tau) : _ Where: tau : the desired smoothing time constant in seconds all other parameters are same as for fof","title":"Usage"},{"location":"libs/physmodels/#pmformantfilterfofcycle","text":"Formant filter based on a single FOF filter. Formant parameters are linearly interpolated allowing to go smoothly from one vowel to another. A cycle of n fof filters with sample-and-hold is used so that the fof filter parameters can be varied in realtime. This technique is more robust but more computationally expensive than formantFilterFofSmooth .Voice type can be selected but must correspond to the frequency range of the provided source to be realistic.","title":"(pm.)formantFilterFofCycle"},{"location":"libs/physmodels/#usage_128","text":"_ : formantFilterFofCycle(voiceType,vowel,nFormants,i,freq) : _ Where: voiceType : the voice type (0: alto, 1: bass, 2: countertenor, 3: soprano, 4: tenor) vowel : the vowel (0: a, 1: e, 2: i, 3: o, 4: u) nFormants : number of formant regions in frequency domain, typically 5 i : formant number (i.e. 0 - 4) used to index formant data value arrays freq : fundamental frequency of excitation signal. Used to calculate rise time of envelope","title":"Usage"},{"location":"libs/physmodels/#pmformantfilterfofsmooth","text":"Formant filter based on a single FOF filter. Formant parameters are linearly interpolated allowing to go smoothly from one vowel to another. Fof filter parameters are lowpass filtered to mitigate possible noise from varying them in realtime. Voice type can be selected but must correspond to the frequency range of the provided source to be realistic.","title":"(pm.)formantFilterFofSmooth"},{"location":"libs/physmodels/#usage_129","text":"_ : formantFilterFofSmooth(voiceType,vowel,nFormants,i,freq) : _ Where: voiceType : the voice type (0: alto, 1: bass, 2: countertenor, 3: soprano, 4: tenor) vowel : the vowel (0: a, 1: e, 2: i, 3: o, 4: u) nFormants : number of formant regions in frequency domain, typically 5 i : formant number (i.e. 1 - 5) used to index formant data value arrays freq : fundamental frequency of excitation signal. Used to calculate rise time of envelope","title":"Usage"},{"location":"libs/physmodels/#pmformantfilterbp","text":"Formant filter based on a single resonant bandpass filter. Formant parameters are linearly interpolated allowing to go smoothly from one vowel to another. Voice type can be selected but must correspond to the frequency range of the provided source to be realistic.","title":"(pm.)formantFilterBP"},{"location":"libs/physmodels/#usage_130","text":"_ : formantFilterBP(voiceType,vowel,nFormants,i,freq) : _ Where: voiceType : the voice type (0: alto, 1: bass, 2: countertenor, 3: soprano, 4: tenor) vowel : the vowel (0: a, 1: e, 2: i, 3: o, 4: u) nFormants : number of formant regions in frequency domain, typically 5 i : formant index used to index formant data value arrays freq : fundamental frequency of excitation signal.","title":"Usage"},{"location":"libs/physmodels/#pmformantfilterbank","text":"Formant filterbank which can use different types of filterbank functions and different excitation signals. Formant parameters are linearly interpolated allowing to go smoothly from one vowel to another. Voice type can be selected but must correspond to the frequency range of the provided source to be realistic.","title":"(pm.)formantFilterbank"},{"location":"libs/physmodels/#usage_131","text":"_ : formantFilterbank(voiceType,vowel,formantGen,freq) : _ Where: voiceType : the voice type (0: alto, 1: bass, 2: countertenor, 3: soprano, 4: tenor) vowel : the vowel (0: a, 1: e, 2: i, 3: o, 4: u) formantGen : the specific formant filterbank function (i.e. FormantFilterbankBP, FormantFilterbankFof,...) freq : fundamental frequency of excitation signal. Needed for FOF version to calculate rise time of envelope","title":"Usage"},{"location":"libs/physmodels/#pmformantfilterbankfofcycle","text":"Formant filterbank based on a bank of fof filters. Formant parameters are linearly interpolated allowing to go smoothly from one vowel to another. Voice type can be selected but must correspond to the frequency range of the provided source to be realistic.","title":"(pm.)formantFilterbankFofCycle"},{"location":"libs/physmodels/#usage_132","text":"_ : formantFilterbankFofCycle(voiceType,vowel,freq) : _ Where: voiceType : the voice type (0: alto, 1: bass, 2: countertenor, 3: soprano, 4: tenor) vowel : the vowel (0: a, 1: e, 2: i, 3: o, 4: u) freq : the fundamental frequency of the excitation signal. Needed to","title":"Usage"},{"location":"libs/physmodels/#pmformantfilterbankfofsmooth","text":"Formant filterbank based on a bank of fof filters. Formant parameters are linearly interpolated allowing to go smoothly from one vowel to another. Voice type can be selected but must correspond to the frequency range of the provided source to be realistic.","title":"(pm.)formantFilterbankFofSmooth"},{"location":"libs/physmodels/#usage_133","text":"_ : formantFilterbankFofSmooth(voiceType,vowel,freq) : _ Where: voiceType : the voice type (0: alto, 1: bass, 2: countertenor, 3: soprano, 4: tenor) vowel : the vowel (0: a, 1: e, 2: i, 3: o, 4: u) freq : the fundamental frequency of the excitation signal. Needed to","title":"Usage"},{"location":"libs/physmodels/#pmformantfilterbankbp","text":"Formant filterbank based on a bank of resonant bandpass filters. Formant parameters are linearly interpolated allowing to go smoothly from one vowel to another. Voice type can be selected but must correspond to the frequency range of the provided source to be realistic.","title":"(pm.)formantFilterbankBP"},{"location":"libs/physmodels/#usage_134","text":"_ : formantFilterbankBP(voiceType,vowel) : _ Where: voiceType : the voice type (0: alto, 1: bass, 2: countertenor, 3: soprano, 4: tenor) vowel : the vowel (0: a, 1: e, 2: i, 3: o, 4: u) freq : the fundamental frequency of the excitation signal. Needed","title":"Usage"},{"location":"libs/physmodels/#pmsfformantmodel","text":"Simple formant/vocal synthesizer based on a source/filter model. The source and filterbank must be specified by the user. filterbank must take the same input parameters as formantFilterbank ( BP / FofCycle / FofSmooth ). Formant parameters are linearly interpolated allowing to go smoothly from one vowel to another. Voice type can be selected but must correspond to the frequency range of the synthesized voice to be realistic.","title":"(pm.)SFFormantModel"},{"location":"libs/physmodels/#usage_135","text":"SFFormantModel(voiceType,vowel,exType,freq,gain,source,filterbank,isFof) : _ Where: voiceType : the voice type (0: alto, 1: bass, 2: countertenor, 3: soprano, 4: tenor) vowel : the vowel (0: a, 1: e, 2: i, 3: o, 4: u exType : voice vs. fricative sound ratio (0-1 where 1 is 100% fricative) freq : the fundamental frequency of the source signal gain : linear gain multiplier to multiply the source by isFof : whether model is FOF based (0: no, 1: yes)","title":"Usage"},{"location":"libs/physmodels/#pmsfformantmodelfofcycle","text":"Simple formant/vocal synthesizer based on a source/filter model. The source is just a periodic impulse and the \"filter\" is a bank of FOF filters. Formant parameters are linearly interpolated allowing to go smoothly from one vowel to another. Voice type can be selected but must correspond to the frequency range of the synthesized voice to be realistic. This model does not work with noise in the source signal so exType has been removed and model does not depend on SFFormantModel function.","title":"(pm.)SFFormantModelFofCycle"},{"location":"libs/physmodels/#usage_136","text":"SFFormantModelFofCycle(voiceType,vowel,freq,gain) : _ Where: voiceType : the voice type (0: alto, 1: bass, 2: countertenor, 3: soprano, 4: tenor) vowel : the vowel (0: a, 1: e, 2: i, 3: o, 4: u freq : the fundamental frequency of the source signal gain : linear gain multiplier to multiply the source by","title":"Usage"},{"location":"libs/physmodels/#pmsfformantmodelfofsmooth","text":"Simple formant/vocal synthesizer based on a source/filter model. The source is just a periodic impulse and the \"filter\" is a bank of FOF filters. Formant parameters are linearly interpolated allowing to go smoothly from one vowel to another. Voice type can be selected but must correspond to the frequency range of the synthesized voice to be realistic.","title":"(pm.)SFFormantModelFofSmooth"},{"location":"libs/physmodels/#usage_137","text":"SFFormantModelFofSmooth(voiceType,vowel,freq,gain) : _ Where: voiceType : the voice type (0: alto, 1: bass, 2: countertenor, 3: soprano, 4: tenor) vowel : the vowel (0: a, 1: e, 2: i, 3: o, 4: u freq : the fundamental frequency of the source signal gain : linear gain multiplier to multiply the source by","title":"Usage"},{"location":"libs/physmodels/#pmsfformantmodelbp","text":"Simple formant/vocal synthesizer based on a source/filter model. The source is just a sawtooth wave and the \"filter\" is a bank of resonant bandpass filters. Formant parameters are linearly interpolated allowing to go smoothly from one vowel to another. Voice type can be selected but must correspond to the frequency range of the synthesized voice to be realistic. The formant data used here come from the CSOUND manual * http://www.csounds.com/manual/html/ .","title":"(pm.)SFFormantModelBP"},{"location":"libs/physmodels/#usage_138","text":"SFFormantModelBP(voiceType,vowel,exType,freq,gain) : _ Where: voiceType : the voice type (0: alto, 1: bass, 2: countertenor, 3: soprano, 4: tenor) vowel : the vowel (0: a, 1: e, 2: i, 3: o, 4: u exType : voice vs. fricative sound ratio (0-1 where 1 is 100% fricative) freq : the fundamental frequency of the source signal gain : linear gain multiplier to multiply the source by","title":"Usage"},{"location":"libs/physmodels/#pmsfformantmodelfofcycle_ui","text":"Ready-to-use source-filter vocal synthesizer with built-in user interface.","title":"(pm.)SFFormantModelFofCycle_ui"},{"location":"libs/physmodels/#usage_139","text":"SFFormantModelFofCycle_ui : _","title":"Usage"},{"location":"libs/physmodels/#pmsfformantmodelfofsmooth_ui","text":"Ready-to-use source-filter vocal synthesizer with built-in user interface.","title":"(pm.)SFFormantModelFofSmooth_ui"},{"location":"libs/physmodels/#usage_140","text":"SFFormantModelFofSmooth_ui : _","title":"Usage"},{"location":"libs/physmodels/#pmsfformantmodelbp_ui","text":"Ready-to-use source-filter vocal synthesizer with built-in user interface.","title":"(pm.)SFFormantModelBP_ui"},{"location":"libs/physmodels/#usage_141","text":"SFFormantModelBP_ui : _","title":"Usage"},{"location":"libs/physmodels/#pmsfformantmodelfofcycle_ui_midi","text":"Ready-to-use MIDI-controllable source-filter vocal synthesizer.","title":"(pm.)SFFormantModelFofCycle_ui_MIDI"},{"location":"libs/physmodels/#usage_142","text":"SFFormantModelFofCycle_ui_MIDI : _","title":"Usage"},{"location":"libs/physmodels/#pmsfformantmodelfofsmooth_ui_midi","text":"Ready-to-use MIDI-controllable source-filter vocal synthesizer.","title":"(pm.)SFFormantModelFofSmooth_ui_MIDI"},{"location":"libs/physmodels/#usage_143","text":"SFFormantModelFofSmooth_ui_MIDI : _","title":"Usage"},{"location":"libs/physmodels/#pmsfformantmodelbp_ui_midi","text":"Ready-to-use MIDI-controllable source-filter vocal synthesizer.","title":"(pm.)SFFormantModelBP_ui_MIDI"},{"location":"libs/physmodels/#usage_144","text":"SFFormantModelBP_ui_MIDI : _","title":"Usage"},{"location":"libs/physmodels/#misc-functions","text":"Various miscellaneous functions.","title":"Misc Functions"},{"location":"libs/physmodels/#pmallpassnl","text":"Bidirectional block adding nonlinearities in both directions in a chain. Nonlinearities are created by modulating the coefficients of a passive allpass filter by the signal it is processing.","title":"(pm.)allpassNL"},{"location":"libs/physmodels/#usage_145","text":"chain(... : allpassNL(nonlinearity) : ...) Where: nonlinearity : amount of nonlinearity to be added (0-1)","title":"Usage"},{"location":"libs/physmodels/#modalmodel","text":"Implement multiple resonance modes using resonant bandpass filters.","title":"modalModel"},{"location":"libs/physmodels/#usage_146","text":"_ : modalModel(n, freqs, t60s, gains) : _ Where: n : number of given modes freqs : list of filter center freqencies t60s : list of mode resonance durations (in seconds) gains : list of mode gains (0-1) For example, to generate a model with 2 modes (440 Hz and 660 Hz, a fifth) where the higher one decays faster and is attenuated: os.impulse : modalModel(2, (440, 660), (0.5, 0.25), (ba.db2linear(-1), ba.db2linear(-6)) : _ Further reading: Grumiaux et. al., 2017: Impulse-Response and CAD-Model-Based Physical Modeling in Faust","title":"Usage"},{"location":"libs/quantizer/","text":"quantizer.lib Faust Frequency Quantization Library. Its official prefix is qu . Functions Reference (qu.)quantize Configurable frequency quantization tool. Outputs only the frenquencies that are part of the specified scale. Doesn't work as intended for frequencies between -1 and 1. Usage _ : quantize(rf,nl) : _ Where : rf : frequency of the root note of the scale. nl : list of the ratio of the frequencies of each note in relation to the root frequency. (qu.)quantizeSmoothed Configurable frequency quantization tool. Outputs frenquencies that are closer to the frequencies of the notes of the specified scale. Doesn't work as intended for frequencies between -1 and 1. Usage _ : quantizeSmoothed(rf,nl) : _ nl = (1,1.2,1.4,1.7); Where : rf : frequency of the root note of the scale. nl : list of the ratio of the frequencies of each note in relation to the root frequency. (qu.)ionian List of the frequency ratios of the notes of the ionian mode. Usage _ : quantize(rf,ionian) : _ Where: rf : frequency of the root note of the scale. (qu.)pentanat List of the frequency ratios of the notes of the pythagorean tuning for the minor pentatonic scale. Usage _ : quantize(rf,pentanat) : _ Where: rf : frequency of the root note of the scale. (qu.)kumoi List of the frequency ratios of the notes of the kumoijoshi, the japanese pentatonic scale. Usage _ : quantize(rf,kumoi) : _ Where: rf : frequency of the root note of the scale. (qu.)natural List of the frequency ratios of the notes of the natural major scale. Usage _ : quantize(rf,natural) : _ Where: rf : frequency of the root note of the scale. (qu.)dodeca List of the frequency ratios of the notes of the dodecaphonic scale. Usage _ : quantize(rf,dodeca) : _ Where: rf : frequency of the root note of the scale. (qu.)dimin List of the frequency ratios of the notes of the diminished scale. Usage _ : quantize(rf,dimin) : _ Where: rf : frequency of the root note of the scale. (qu.)penta List of the frequency ratios of the notes of the minor pentatonic scale. Usage _ : quantize(rf,penta) : _ Where: rf : frequency of the root note of the scale. (qu.)dorian List of the frequency ratios of the notes of the dorian mode. Usage _ : quantize(rf,dorian) : _ Where: rf : frequency of the root note of the scale.","title":" quantizer "},{"location":"libs/quantizer/#quantizerlib","text":"Faust Frequency Quantization Library. Its official prefix is qu .","title":"quantizer.lib"},{"location":"libs/quantizer/#functions-reference","text":"","title":"Functions Reference"},{"location":"libs/quantizer/#ququantize","text":"Configurable frequency quantization tool. Outputs only the frenquencies that are part of the specified scale. Doesn't work as intended for frequencies between -1 and 1.","title":"(qu.)quantize"},{"location":"libs/quantizer/#usage","text":"_ : quantize(rf,nl) : _ Where : rf : frequency of the root note of the scale. nl : list of the ratio of the frequencies of each note in relation to the root frequency.","title":"Usage"},{"location":"libs/quantizer/#ququantizesmoothed","text":"Configurable frequency quantization tool. Outputs frenquencies that are closer to the frequencies of the notes of the specified scale. Doesn't work as intended for frequencies between -1 and 1.","title":"(qu.)quantizeSmoothed"},{"location":"libs/quantizer/#usage_1","text":"_ : quantizeSmoothed(rf,nl) : _ nl = (1,1.2,1.4,1.7); Where : rf : frequency of the root note of the scale. nl : list of the ratio of the frequencies of each note in relation to the root frequency.","title":"Usage"},{"location":"libs/quantizer/#quionian","text":"List of the frequency ratios of the notes of the ionian mode.","title":"(qu.)ionian"},{"location":"libs/quantizer/#usage_2","text":"_ : quantize(rf,ionian) : _ Where: rf : frequency of the root note of the scale.","title":"Usage"},{"location":"libs/quantizer/#qupentanat","text":"List of the frequency ratios of the notes of the pythagorean tuning for the minor pentatonic scale.","title":"(qu.)pentanat"},{"location":"libs/quantizer/#usage_3","text":"_ : quantize(rf,pentanat) : _ Where: rf : frequency of the root note of the scale.","title":"Usage"},{"location":"libs/quantizer/#qukumoi","text":"List of the frequency ratios of the notes of the kumoijoshi, the japanese pentatonic scale.","title":"(qu.)kumoi"},{"location":"libs/quantizer/#usage_4","text":"_ : quantize(rf,kumoi) : _ Where: rf : frequency of the root note of the scale.","title":"Usage"},{"location":"libs/quantizer/#qunatural","text":"List of the frequency ratios of the notes of the natural major scale.","title":"(qu.)natural"},{"location":"libs/quantizer/#usage_5","text":"_ : quantize(rf,natural) : _ Where: rf : frequency of the root note of the scale.","title":"Usage"},{"location":"libs/quantizer/#qudodeca","text":"List of the frequency ratios of the notes of the dodecaphonic scale.","title":"(qu.)dodeca"},{"location":"libs/quantizer/#usage_6","text":"_ : quantize(rf,dodeca) : _ Where: rf : frequency of the root note of the scale.","title":"Usage"},{"location":"libs/quantizer/#qudimin","text":"List of the frequency ratios of the notes of the diminished scale.","title":"(qu.)dimin"},{"location":"libs/quantizer/#usage_7","text":"_ : quantize(rf,dimin) : _ Where: rf : frequency of the root note of the scale.","title":"Usage"},{"location":"libs/quantizer/#qupenta","text":"List of the frequency ratios of the notes of the minor pentatonic scale.","title":"(qu.)penta"},{"location":"libs/quantizer/#usage_8","text":"_ : quantize(rf,penta) : _ Where: rf : frequency of the root note of the scale.","title":"Usage"},{"location":"libs/quantizer/#qudorian","text":"List of the frequency ratios of the notes of the dorian mode.","title":"(qu.)dorian"},{"location":"libs/quantizer/#usage_9","text":"_ : quantize(rf,dorian) : _ Where: rf : frequency of the root note of the scale.","title":"Usage"},{"location":"libs/quantizers/","text":"quantizers.lib Faust Frequency Quantization Library. Its official prefix is qu . Functions Reference (qu.)quantize Configurable frequency quantization tool. Outputs only the frenquencies that are part of the specified scale. Works for positive audio frequencies. Usage _ : quantize(rf,nl) : _ Where : * rf : frequency of the root note of the scale. * nl : list of the ratio of the frequencies of each note in relation to the root frequency. (qu.)quantizeSmoothed Configurable frequency quantization tool. Outputs frenquencies that are closer to the frequencies of the notes of the specified scale. Works for positive audio frequencies. Usage _ : quantizeSmoothed(rf,nl) : _ nl = (1,1.2,1.4,1.7); Where : * rf : frequency of the root note of the scale. * nl : list of the ratio of the frequencies of each note in relation to the root frequency. (qu.)ionian List of the frequency ratios of the notes of the ionian mode. Usage _ : quantize(rf,ionian) : _ Where: * rf : frequency of the root note of the scale. (qu.)dorian List of the frequency ratios of the notes of the dorian mode. Usage _ : quantize(rf,dorian) : _ Where: * rf : frequency of the root note of the scale. (qu.)phrygian List of the frequency ratios of the notes of the phrygian mode. Usage _ : quantize(rf,phrygian) : _ Where: * rf : frequency of the root note of the scale. (qu.)lydian List of the frequency ratios of the notes of the lydian mode. Usage _ : quantize(rf,lydian) : _ Where: * rf : frequency of the root note of the scale. (qu.)mixo List of the frequency ratios of the notes of the mixolydian mode. Usage _ : quantize(rf,mixo) : _ Where: * rf : frequency of the root note of the scale. (qu.)eolian List of the frequency ratios of the notes of the eolian mode. Usage _ : quantize(rf,eolian) : _ Where: * rf : frequency of the root note of the scale. (qu.)locrian List of the frequency ratios of the notes of the locrian mode. Usage _ : quantize(rf,locrian) : _ Where: * rf : frequency of the root note of the scale. (qu.)pentanat List of the frequency ratios of the notes of the pythagorean tuning for the minor pentatonic scale. Usage _ : quantize(rf,pentanat) : _ Where: * rf : frequency of the root note of the scale. (qu.)kumoi List of the frequency ratios of the notes of the kumoijoshi, the japanese pentatonic scale. Usage _ : quantize(rf,kumoi) : _ Where: * rf : frequency of the root note of the scale. (qu.)natural List of the frequency ratios of the notes of the natural major scale. Usage _ : quantize(rf,natural) : _ Where: * rf : frequency of the root note of the scale. (qu.)dodeca List of the frequency ratios of the notes of the dodecaphonic scale. Usage _ : quantize(rf,dodeca) : _ Where: * rf : frequency of the root note of the scale. (qu.)dimin List of the frequency ratios of the notes of the diminished scale. Usage _ : quantize(rf,dimin) : _ Where: * rf : frequency of the root note of the scale. (qu.)penta List of the frequency ratios of the notes of the minor pentatonic scale. Usage _ : quantize(rf,penta) : _ Where: * rf : frequency of the root note of the scale.","title":"quantizers.lib"},{"location":"libs/quantizers/#quantizerslib","text":"Faust Frequency Quantization Library. Its official prefix is qu .","title":"quantizers.lib"},{"location":"libs/quantizers/#_1","text":"","title":""},{"location":"libs/quantizers/#functions-reference","text":"","title":"Functions Reference"},{"location":"libs/quantizers/#_2","text":"","title":""},{"location":"libs/quantizers/#ququantize","text":"Configurable frequency quantization tool. Outputs only the frenquencies that are part of the specified scale. Works for positive audio frequencies.","title":"(qu.)quantize"},{"location":"libs/quantizers/#usage","text":"_ : quantize(rf,nl) : _ Where : * rf : frequency of the root note of the scale. * nl : list of the ratio of the frequencies of each note in relation to the root frequency.","title":"Usage"},{"location":"libs/quantizers/#_3","text":"","title":""},{"location":"libs/quantizers/#ququantizesmoothed","text":"Configurable frequency quantization tool. Outputs frenquencies that are closer to the frequencies of the notes of the specified scale. Works for positive audio frequencies.","title":"(qu.)quantizeSmoothed"},{"location":"libs/quantizers/#usage_1","text":"_ : quantizeSmoothed(rf,nl) : _ nl = (1,1.2,1.4,1.7); Where : * rf : frequency of the root note of the scale. * nl : list of the ratio of the frequencies of each note in relation to the root frequency.","title":"Usage"},{"location":"libs/quantizers/#_4","text":"","title":""},{"location":"libs/quantizers/#quionian","text":"List of the frequency ratios of the notes of the ionian mode.","title":"(qu.)ionian"},{"location":"libs/quantizers/#usage_2","text":"_ : quantize(rf,ionian) : _ Where: * rf : frequency of the root note of the scale.","title":"Usage"},{"location":"libs/quantizers/#_5","text":"","title":""},{"location":"libs/quantizers/#qudorian","text":"List of the frequency ratios of the notes of the dorian mode.","title":"(qu.)dorian"},{"location":"libs/quantizers/#usage_3","text":"_ : quantize(rf,dorian) : _ Where: * rf : frequency of the root note of the scale.","title":"Usage"},{"location":"libs/quantizers/#_6","text":"","title":""},{"location":"libs/quantizers/#quphrygian","text":"List of the frequency ratios of the notes of the phrygian mode.","title":"(qu.)phrygian"},{"location":"libs/quantizers/#usage_4","text":"_ : quantize(rf,phrygian) : _ Where: * rf : frequency of the root note of the scale.","title":"Usage"},{"location":"libs/quantizers/#_7","text":"","title":""},{"location":"libs/quantizers/#qulydian","text":"List of the frequency ratios of the notes of the lydian mode.","title":"(qu.)lydian"},{"location":"libs/quantizers/#usage_5","text":"_ : quantize(rf,lydian) : _ Where: * rf : frequency of the root note of the scale.","title":"Usage"},{"location":"libs/quantizers/#_8","text":"","title":""},{"location":"libs/quantizers/#qumixo","text":"List of the frequency ratios of the notes of the mixolydian mode.","title":"(qu.)mixo"},{"location":"libs/quantizers/#usage_6","text":"_ : quantize(rf,mixo) : _ Where: * rf : frequency of the root note of the scale.","title":"Usage"},{"location":"libs/quantizers/#_9","text":"","title":""},{"location":"libs/quantizers/#queolian","text":"List of the frequency ratios of the notes of the eolian mode.","title":"(qu.)eolian"},{"location":"libs/quantizers/#usage_7","text":"_ : quantize(rf,eolian) : _ Where: * rf : frequency of the root note of the scale.","title":"Usage"},{"location":"libs/quantizers/#_10","text":"","title":""},{"location":"libs/quantizers/#qulocrian","text":"List of the frequency ratios of the notes of the locrian mode.","title":"(qu.)locrian"},{"location":"libs/quantizers/#usage_8","text":"_ : quantize(rf,locrian) : _ Where: * rf : frequency of the root note of the scale.","title":"Usage"},{"location":"libs/quantizers/#_11","text":"","title":""},{"location":"libs/quantizers/#qupentanat","text":"List of the frequency ratios of the notes of the pythagorean tuning for the minor pentatonic scale.","title":"(qu.)pentanat"},{"location":"libs/quantizers/#usage_9","text":"_ : quantize(rf,pentanat) : _ Where: * rf : frequency of the root note of the scale.","title":"Usage"},{"location":"libs/quantizers/#_12","text":"","title":""},{"location":"libs/quantizers/#qukumoi","text":"List of the frequency ratios of the notes of the kumoijoshi, the japanese pentatonic scale.","title":"(qu.)kumoi"},{"location":"libs/quantizers/#usage_10","text":"_ : quantize(rf,kumoi) : _ Where: * rf : frequency of the root note of the scale.","title":"Usage"},{"location":"libs/quantizers/#_13","text":"","title":""},{"location":"libs/quantizers/#qunatural","text":"List of the frequency ratios of the notes of the natural major scale.","title":"(qu.)natural"},{"location":"libs/quantizers/#usage_11","text":"_ : quantize(rf,natural) : _ Where: * rf : frequency of the root note of the scale.","title":"Usage"},{"location":"libs/quantizers/#_14","text":"","title":""},{"location":"libs/quantizers/#qudodeca","text":"List of the frequency ratios of the notes of the dodecaphonic scale.","title":"(qu.)dodeca"},{"location":"libs/quantizers/#usage_12","text":"_ : quantize(rf,dodeca) : _ Where: * rf : frequency of the root note of the scale.","title":"Usage"},{"location":"libs/quantizers/#_15","text":"","title":""},{"location":"libs/quantizers/#qudimin","text":"List of the frequency ratios of the notes of the diminished scale.","title":"(qu.)dimin"},{"location":"libs/quantizers/#usage_13","text":"_ : quantize(rf,dimin) : _ Where: * rf : frequency of the root note of the scale.","title":"Usage"},{"location":"libs/quantizers/#_16","text":"","title":""},{"location":"libs/quantizers/#qupenta","text":"List of the frequency ratios of the notes of the minor pentatonic scale.","title":"(qu.)penta"},{"location":"libs/quantizers/#usage_14","text":"_ : quantize(rf,penta) : _ Where: * rf : frequency of the root note of the scale.","title":"Usage"},{"location":"libs/quantizers/#_17","text":"","title":""},{"location":"libs/reducemaps/","text":"reducemaps.lib A library to handle reduce/map kind of operation in Faust. Its official prefix is rm . (rm.)reduce Fold-like high order function. Apply a binary operation on a block of consecutive samples of a signal . For example : reduce(max,128) will compute the maximun of each block of 128 samples. Please note that the resulting value, while produced continuously, will be constant for the duration of a block. A new value is only produced at the end of a block. Note also that blocks should be of at least one sample (n>0). Usage reduce(op, n, x) (rm.)reducemap Like reduce but a foo function is applied to the result. From a mathematical point of view : reducemap(op,foo,n) is equivalent to reduce(op,n):foo but more efficient. Usage reducemap(op, foo, n, x)","title":" reducemaps "},{"location":"libs/reducemaps/#reducemapslib","text":"A library to handle reduce/map kind of operation in Faust. Its official prefix is rm .","title":"reducemaps.lib"},{"location":"libs/reducemaps/#rmreduce","text":"Fold-like high order function. Apply a binary operation on a block of consecutive samples of a signal . For example : reduce(max,128) will compute the maximun of each block of 128 samples. Please note that the resulting value, while produced continuously, will be constant for the duration of a block. A new value is only produced at the end of a block. Note also that blocks should be of at least one sample (n>0).","title":"(rm.)reduce"},{"location":"libs/reducemaps/#usage","text":"reduce(op, n, x)","title":"Usage"},{"location":"libs/reducemaps/#rmreducemap","text":"Like reduce but a foo function is applied to the result. From a mathematical point of view : reducemap(op,foo,n) is equivalent to reduce(op,n):foo but more efficient.","title":"(rm.)reducemap"},{"location":"libs/reducemaps/#usage_1","text":"reducemap(op, foo, n, x)","title":"Usage"},{"location":"libs/reverbs/","text":"reverbs.lib A library of reverb effects. Its official prefix is re . Schroeder Reverberators (re.)jcrev This artificial reverberator take a mono signal and output stereo ( satrev ) and quad ( jcrev ). They were implemented by John Chowning in the MUS10 computer-music language (descended from Music V by Max Mathews). They are Schroeder Reverberators, well tuned for their size. Nowadays, the more expensive freeverb is more commonly used (see the Faust examples directory). jcrev reverb below was made from a listing of \"RV\", dated April 14, 1972, which was recovered from an old SAIL DART backup tape. John Chowning thinks this might be the one that became the well known and often copied JCREV. jcrev is a standard Faust function Usage _ : jcrev : _,_,_,_ (re.)satrev This artificial reverberator take a mono signal and output stereo ( satrev ) and quad ( jcrev ). They were implemented by John Chowning in the MUS10 computer-music language (descended from Music V by Max Mathews). They are Schroeder Reverberators, well tuned for their size. Nowadays, the more expensive freeverb is more commonly used (see the Faust examples directory). satrev was made from a listing of \"SATREV\", dated May 15, 1971, which was recovered from an old SAIL DART backup tape. John Chowning thinks this might be the one used on his often-heard brass canon sound examples, one of which can be found at * https://ccrma.stanford.edu/~jos/wav/FM-BrassCanon2.wav . Usage _ : satrev : _,_ Feedback Delay Network (FDN) Reverberators (re.)fdnrev0 Pure Feedback Delay Network Reverberator (generalized for easy scaling). fdnrev0 is a standard Faust function. Usage <1,2,4,...,N signals> <: fdnrev0(MAXDELAY,delays,BBSO,freqs,durs,loopgainmax,nonl) :> <1,2,4,...,N signals> Where: N : 2, 4, 8, ... (power of 2) MAXDELAY : power of 2 at least as large as longest delay-line length delays : N delay lines, N a power of 2, lengths perferably coprime BBSO : odd positive integer = order of bandsplit desired at freqs freqs : NB-1 crossover frequencies separating desired frequency bands durs : NB decay times (t60) desired for the various bands loopgainmax : scalar gain between 0 and 1 used to \"squelch\" the reverb nonl : nonlinearity (0 to 0.999..., 0 being linear) Reference https://ccrma.stanford.edu/~jos/pasp/FDN_Reverberation.html (re.)zita_rev_fdn Internal 8x8 late-reverberation FDN used in the FOSS Linux reverb zita-rev1 by Fons Adriaensen fons@linuxaudio.org . This is an FDN reverb with allpass comb filters in each feedback delay in addition to the damping filters. Usage bus(8) : zita_rev_fdn(f1,f2,t60dc,t60m,fsmax) : bus(8) Where: f1 : crossover frequency (Hz) separating dc and midrange frequencies f2 : frequency (Hz) above f1 where T60 = t60m/2 (see below) t60dc : desired decay time (t60) at frequency 0 (sec) t60m : desired decay time (t60) at midrange frequencies (sec) fsmax : maximum sampling rate to be used (Hz) Reference http://www.kokkinizita.net/linuxaudio/zita-rev1-doc/quickguide.html https://ccrma.stanford.edu/~jos/pasp/Zita_Rev1.html (re.)zita_rev1_stereo Extend zita_rev_fdn to include zita_rev1 input/output mapping in stereo mode. zita_rev1_stereo is a standard Faust function. Usage _,_ : zita_rev1_stereo(rdel,f1,f2,t60dc,t60m,fsmax) : _,_ Where: rdel = delay (in ms) before reverberation begins (e.g., 0 to ~100 ms) (remaining args and refs as for zita_rev_fdn above) (re.)zita_rev1_ambi Extend zita_rev_fdn to include zita_rev1 input/output mapping in \"ambisonics mode\", as provided in the Linux C++ version. Usage _,_ : zita_rev1_ambi(rgxyz,rdel,f1,f2,t60dc,t60m,fsmax) : _,_,_,_ Where: rgxyz = relative gain of lanes 1,4,2 to lane 0 in output (e.g., -9 to 9) (remaining args and references as for zita_rev1_stereo above) Freeverb (re.)mono_freeverb A simple Schroeder reverberator primarily developed by \"Jezar at Dreampoint\" that is extensively used in the free-software world. It uses four Schroeder allpasses in series and eight parallel Schroeder-Moorer filtered-feedback comb-filters for each audio channel, and is said to be especially well tuned. mono_freeverb is a standard Faust function. Usage _ : mono_freeverb(fb1, fb2, damp, spread) : _; Where: fb1 : coefficient of the lowpass comb filters (0-1) fb2 : coefficient of the allpass comb filters (0-1) damp : damping of the lowpass comb filter (0-1) spread : spatial spread in number of samples (for stereo) License While this version is licensed LGPL (with exception) along with other GRAME library functions, the file freeverb.dsp in the examples directory of older Faust distributions, such as faust-0.9.85, was released under the BSD license, which is less restrictive. (re.)stereo_freeverb A simple Schroeder reverberator primarily developed by \"Jezar at Dreampoint\" that is extensively used in the free-software world. It uses four Schroeder allpasses in series and eight parallel Schroeder-Moorer filtered-feedback comb-filters for each audio channel, and is said to be especially well tuned. Usage _,_ : stereo_freeverb(fb1, fb2, damp, spread) : _,_; Where: fb1 : coefficient of the lowpass comb filters (0-1) fb2 : coefficient of the allpass comb filters (0-1) damp : damping of the lowpass comb filter (0-1) spread : spatial spread in number of samples (for stereo)","title":" reverbs "},{"location":"libs/reverbs/#reverbslib","text":"A library of reverb effects. Its official prefix is re .","title":"reverbs.lib"},{"location":"libs/reverbs/#schroeder-reverberators","text":"","title":"Schroeder Reverberators"},{"location":"libs/reverbs/#rejcrev","text":"This artificial reverberator take a mono signal and output stereo ( satrev ) and quad ( jcrev ). They were implemented by John Chowning in the MUS10 computer-music language (descended from Music V by Max Mathews). They are Schroeder Reverberators, well tuned for their size. Nowadays, the more expensive freeverb is more commonly used (see the Faust examples directory). jcrev reverb below was made from a listing of \"RV\", dated April 14, 1972, which was recovered from an old SAIL DART backup tape. John Chowning thinks this might be the one that became the well known and often copied JCREV. jcrev is a standard Faust function","title":"(re.)jcrev"},{"location":"libs/reverbs/#usage","text":"_ : jcrev : _,_,_,_","title":"Usage"},{"location":"libs/reverbs/#resatrev","text":"This artificial reverberator take a mono signal and output stereo ( satrev ) and quad ( jcrev ). They were implemented by John Chowning in the MUS10 computer-music language (descended from Music V by Max Mathews). They are Schroeder Reverberators, well tuned for their size. Nowadays, the more expensive freeverb is more commonly used (see the Faust examples directory). satrev was made from a listing of \"SATREV\", dated May 15, 1971, which was recovered from an old SAIL DART backup tape. John Chowning thinks this might be the one used on his often-heard brass canon sound examples, one of which can be found at * https://ccrma.stanford.edu/~jos/wav/FM-BrassCanon2.wav .","title":"(re.)satrev"},{"location":"libs/reverbs/#usage_1","text":"_ : satrev : _,_","title":"Usage"},{"location":"libs/reverbs/#feedback-delay-network-fdn-reverberators","text":"","title":"Feedback Delay Network (FDN) Reverberators"},{"location":"libs/reverbs/#refdnrev0","text":"Pure Feedback Delay Network Reverberator (generalized for easy scaling). fdnrev0 is a standard Faust function.","title":"(re.)fdnrev0"},{"location":"libs/reverbs/#usage_2","text":"<1,2,4,...,N signals> <: fdnrev0(MAXDELAY,delays,BBSO,freqs,durs,loopgainmax,nonl) :> <1,2,4,...,N signals> Where: N : 2, 4, 8, ... (power of 2) MAXDELAY : power of 2 at least as large as longest delay-line length delays : N delay lines, N a power of 2, lengths perferably coprime BBSO : odd positive integer = order of bandsplit desired at freqs freqs : NB-1 crossover frequencies separating desired frequency bands durs : NB decay times (t60) desired for the various bands loopgainmax : scalar gain between 0 and 1 used to \"squelch\" the reverb nonl : nonlinearity (0 to 0.999..., 0 being linear)","title":"Usage"},{"location":"libs/reverbs/#reference","text":"https://ccrma.stanford.edu/~jos/pasp/FDN_Reverberation.html","title":"Reference"},{"location":"libs/reverbs/#rezita_rev_fdn","text":"Internal 8x8 late-reverberation FDN used in the FOSS Linux reverb zita-rev1 by Fons Adriaensen fons@linuxaudio.org . This is an FDN reverb with allpass comb filters in each feedback delay in addition to the damping filters.","title":"(re.)zita_rev_fdn"},{"location":"libs/reverbs/#usage_3","text":"bus(8) : zita_rev_fdn(f1,f2,t60dc,t60m,fsmax) : bus(8) Where: f1 : crossover frequency (Hz) separating dc and midrange frequencies f2 : frequency (Hz) above f1 where T60 = t60m/2 (see below) t60dc : desired decay time (t60) at frequency 0 (sec) t60m : desired decay time (t60) at midrange frequencies (sec) fsmax : maximum sampling rate to be used (Hz)","title":"Usage"},{"location":"libs/reverbs/#reference_1","text":"http://www.kokkinizita.net/linuxaudio/zita-rev1-doc/quickguide.html https://ccrma.stanford.edu/~jos/pasp/Zita_Rev1.html","title":"Reference"},{"location":"libs/reverbs/#rezita_rev1_stereo","text":"Extend zita_rev_fdn to include zita_rev1 input/output mapping in stereo mode. zita_rev1_stereo is a standard Faust function.","title":"(re.)zita_rev1_stereo"},{"location":"libs/reverbs/#usage_4","text":"_,_ : zita_rev1_stereo(rdel,f1,f2,t60dc,t60m,fsmax) : _,_ Where: rdel = delay (in ms) before reverberation begins (e.g., 0 to ~100 ms) (remaining args and refs as for zita_rev_fdn above)","title":"Usage"},{"location":"libs/reverbs/#rezita_rev1_ambi","text":"Extend zita_rev_fdn to include zita_rev1 input/output mapping in \"ambisonics mode\", as provided in the Linux C++ version.","title":"(re.)zita_rev1_ambi"},{"location":"libs/reverbs/#usage_5","text":"_,_ : zita_rev1_ambi(rgxyz,rdel,f1,f2,t60dc,t60m,fsmax) : _,_,_,_ Where: rgxyz = relative gain of lanes 1,4,2 to lane 0 in output (e.g., -9 to 9) (remaining args and references as for zita_rev1_stereo above)","title":"Usage"},{"location":"libs/reverbs/#freeverb","text":"","title":"Freeverb"},{"location":"libs/reverbs/#remono_freeverb","text":"A simple Schroeder reverberator primarily developed by \"Jezar at Dreampoint\" that is extensively used in the free-software world. It uses four Schroeder allpasses in series and eight parallel Schroeder-Moorer filtered-feedback comb-filters for each audio channel, and is said to be especially well tuned. mono_freeverb is a standard Faust function.","title":"(re.)mono_freeverb"},{"location":"libs/reverbs/#usage_6","text":"_ : mono_freeverb(fb1, fb2, damp, spread) : _; Where: fb1 : coefficient of the lowpass comb filters (0-1) fb2 : coefficient of the allpass comb filters (0-1) damp : damping of the lowpass comb filter (0-1) spread : spatial spread in number of samples (for stereo)","title":"Usage"},{"location":"libs/reverbs/#license","text":"While this version is licensed LGPL (with exception) along with other GRAME library functions, the file freeverb.dsp in the examples directory of older Faust distributions, such as faust-0.9.85, was released under the BSD license, which is less restrictive.","title":"License"},{"location":"libs/reverbs/#restereo_freeverb","text":"A simple Schroeder reverberator primarily developed by \"Jezar at Dreampoint\" that is extensively used in the free-software world. It uses four Schroeder allpasses in series and eight parallel Schroeder-Moorer filtered-feedback comb-filters for each audio channel, and is said to be especially well tuned.","title":"(re.)stereo_freeverb"},{"location":"libs/reverbs/#usage_7","text":"_,_ : stereo_freeverb(fb1, fb2, damp, spread) : _,_; Where: fb1 : coefficient of the lowpass comb filters (0-1) fb2 : coefficient of the allpass comb filters (0-1) damp : damping of the lowpass comb filter (0-1) spread : spatial spread in number of samples (for stereo)","title":"Usage"},{"location":"libs/routes/","text":"routes.lib A library to handle signal routing in Faust. Its official prefix is ro . Functions Reference (ro.)cross Cross n signals: (x1,x2,..,xn) -> (xn,..,x2,x1) . cross is a standard Faust function. Usage cross(n) _,_,_ : cross(3) : _,_,_ Where: n : number of signals (int, must be known at compile time) Note Special case: cross2 : cross2 = _,cross(2),_; (ro.)crossnn Cross two bus(n) s. Usage (si.bus(2*n)) : crossnn(n) : (si.bus(2*n)) Where: n : the number of signals in the bus (ro.)crossn1 Cross bus(n) and bus(1). Usage (si.bus(n),_) : crossn1(n) : (_,si.bus(n)) Where: n : the number of signals in the first bus (ro.)cross1n Cross bus(1) and bus(n). Usage (_,si.bus(n)) : crossn1(n) : (si.bus(n),_) Where: n : the number of signals in the second bus (ro.)crossNM Cross bus(n) and bus(m). Usage (si.bus(n),si.bus(m)) : crossNM(n,m) : (si.bus(m),si.bus(n)) Where: n : the number of signals in the first bus m : the number of signals in the second bus (ro.)interleave Interleave row col cables from column order to row order. input : x(0), x(1), x(2) ..., x(row col-1) output: x(0+0 row), x(0+1 row), x(0+2 row), ..., x(1+0 row), x(1+1 row), x(1+2 row), ... Usage _,_,_,_,_,_ : interleave(row,column) : _,_,_,_,_,_ Where: row : the number of row (int, known at compile time) column : the number of column (int, known at compile time) (ro.)butterfly Addition (first half) then substraction (second half) of interleaved signals. Usage _,_,_,_ : butterfly(n) : _,_,_,_ Where: n : size of the butterfly (n is int, even and known at compile time) (ro.)hadamard Hadamard matrix function of size n = 2^k . Usage _,_,_,_ : hadamard(n) : _,_,_,_ Where: n : 2^k , size of the matrix (int, must be known at compile time) Note: Implementation contributed by Remy Muller. (ro.)recursivize Create a recursion from two arbitrary processors p and q. Usage _,_ : recursivize(p,q) : _,_ Where: p : the forward arbitrary processor q : the feedback arbitrary processor","title":" routes "},{"location":"libs/routes/#routeslib","text":"A library to handle signal routing in Faust. Its official prefix is ro .","title":"routes.lib"},{"location":"libs/routes/#functions-reference","text":"","title":"Functions Reference"},{"location":"libs/routes/#rocross","text":"Cross n signals: (x1,x2,..,xn) -> (xn,..,x2,x1) . cross is a standard Faust function.","title":"(ro.)cross"},{"location":"libs/routes/#usage","text":"cross(n) _,_,_ : cross(3) : _,_,_ Where: n : number of signals (int, must be known at compile time)","title":"Usage"},{"location":"libs/routes/#note","text":"Special case: cross2 : cross2 = _,cross(2),_;","title":"Note"},{"location":"libs/routes/#rocrossnn","text":"Cross two bus(n) s.","title":"(ro.)crossnn"},{"location":"libs/routes/#usage_1","text":"(si.bus(2*n)) : crossnn(n) : (si.bus(2*n)) Where: n : the number of signals in the bus","title":"Usage"},{"location":"libs/routes/#rocrossn1","text":"Cross bus(n) and bus(1).","title":"(ro.)crossn1"},{"location":"libs/routes/#usage_2","text":"(si.bus(n),_) : crossn1(n) : (_,si.bus(n)) Where: n : the number of signals in the first bus","title":"Usage"},{"location":"libs/routes/#rocross1n","text":"Cross bus(1) and bus(n).","title":"(ro.)cross1n"},{"location":"libs/routes/#usage_3","text":"(_,si.bus(n)) : crossn1(n) : (si.bus(n),_) Where: n : the number of signals in the second bus","title":"Usage"},{"location":"libs/routes/#rocrossnm","text":"Cross bus(n) and bus(m).","title":"(ro.)crossNM"},{"location":"libs/routes/#usage_4","text":"(si.bus(n),si.bus(m)) : crossNM(n,m) : (si.bus(m),si.bus(n)) Where: n : the number of signals in the first bus m : the number of signals in the second bus","title":"Usage"},{"location":"libs/routes/#rointerleave","text":"Interleave row col cables from column order to row order. input : x(0), x(1), x(2) ..., x(row col-1) output: x(0+0 row), x(0+1 row), x(0+2 row), ..., x(1+0 row), x(1+1 row), x(1+2 row), ...","title":"(ro.)interleave"},{"location":"libs/routes/#usage_5","text":"_,_,_,_,_,_ : interleave(row,column) : _,_,_,_,_,_ Where: row : the number of row (int, known at compile time) column : the number of column (int, known at compile time)","title":"Usage"},{"location":"libs/routes/#robutterfly","text":"Addition (first half) then substraction (second half) of interleaved signals.","title":"(ro.)butterfly"},{"location":"libs/routes/#usage_6","text":"_,_,_,_ : butterfly(n) : _,_,_,_ Where: n : size of the butterfly (n is int, even and known at compile time)","title":"Usage"},{"location":"libs/routes/#rohadamard","text":"Hadamard matrix function of size n = 2^k .","title":"(ro.)hadamard"},{"location":"libs/routes/#usage_7","text":"_,_,_,_ : hadamard(n) : _,_,_,_ Where: n : 2^k , size of the matrix (int, must be known at compile time)","title":"Usage"},{"location":"libs/routes/#note_1","text":"Implementation contributed by Remy Muller.","title":"Note:"},{"location":"libs/routes/#rorecursivize","text":"Create a recursion from two arbitrary processors p and q.","title":"(ro.)recursivize"},{"location":"libs/routes/#usage_8","text":"_,_ : recursivize(p,q) : _,_ Where: p : the forward arbitrary processor q : the feedback arbitrary processor","title":"Usage"},{"location":"libs/signals/","text":"signals.lib A library of basic elements to handle signals in Faust. Its official prefix is si . Functions Reference (si.)bus Put n cables in parallel. bus is a standard Faust function. Usage bus(N) bus(4) : _,_,_,_ Where: N : is an integer known at compile time that indicates the number of parallel cables (si.)block Block - terminate N signals. block is a standard Faust function. Usage _,_,... : block(n) : _,... Where: N : the number of signals to be blocked known at compile time (si.)interpolate Linear interpolation between two signals. Usage _,_ : interpolate(i) : _ Where: i : interpolation control between 0 and 1 (0: first input; 1: second input) (si.)smoo Smoothing function based on smooth ideal to smooth UI signals (sliders, etc.) down. smoo is a standard Faust function. Usage hslider(...) : smoo; (si.)polySmooth A smoothing function based on smooth that doesn't smooth when a trigger signal is given. This is very useful when making polyphonic synthesizer to make sure that the value of the parameter is the right one when the note is started. Usage hslider(...) : polySmooth(g,s,d) : _ Where: g : the gate/trigger signal used when making polyphonic synths s : the smoothness (see smooth ) d : the number of samples to wait before the signal start being smoothed after g switched to 1 (si.)smoothAndH A smoothing function based on smooth that holds its output signal when a trigger is sent to it. This feature is convenient when implementing polyphonic instruments to prevent some smoothed parameter to change when a note-off event is sent. Usage hslider(...) : smoothAndH(g,s) : _ Where: g : the hold signal (0 for hold, 1 for bypass) s : the smoothness (see smooth ) (si.)bsmooth Block smooth linear interpolation during a block of samples. Usage hslider(...) : bsmooth : _ (si.)dot Dot product for two vectors of size N. Usage _,_,_,_,_,_ : dot(N) : _ Where: N : size of the vectors (int, must be known at compile time) (si.)smooth Exponential smoothing by a unity-dc-gain one-pole lowpass. smooth is a standard Faust function. Usage: _ : smooth(tau2pole(tau)) : _ Where: tau : desired smoothing time constant in seconds, or hslider(...) : smooth(s) : _ Where: s : smoothness between 0 and 1. s=0 for no smoothing, s=0.999 is \"very smooth\", s>1 is unstable, and s=1 yields the zero signal for all inputs. The exponential time-constant is approximately 1/(1-s) samples, when s is close to (but less than) 1. Reference: https://ccrma.stanford.edu/~jos/mdft/Convolution_Example_2_ADSR.html (si.)cbus n parallel cables for complex signals. cbus is a standard Faust function. Usage cbus(n) cbus(4) : (r0,i0), (r1,i1), (r2,i2), (r3,i3) Where: n : is an integer known at compile time that indicates the number of parallel cables. each complex number is represented by two real signals as (real,imag) (si.)cmul multiply two complex signals pointwise. cmul is a standard Faust function. Usage (r1,i1) : cmul(r2,i2) : (_,_); Where: Each complex number is represented by two real signals as (real,imag), so (r1,i1) = real and imaginary parts of signal 1 (r2,i2) = real and imaginary parts of signal 2 (si.)cconj complex conjugation of a (complex) signal. cconj is a standard Faust function. Usage (r1,i1) : cconj : (_,_); Where: Each complex number is represented by two real signals as (real,imag), so (r1,i1) = real and imaginary parts of the input signal (r1,-i1) = real and imaginary parts of the output signal (si.)lag_ud Lag filter with separate times for up and down. Usage _ : lag_ud(up, dn) : _; (si.)rev Reverse the input signal by blocks of N>0 samples. rev(1) is the indentity function. rev(N) has a latency of N-1 samples. Usage _ : rev(N) : _; Where: N : the block size","title":" signals "},{"location":"libs/signals/#signalslib","text":"A library of basic elements to handle signals in Faust. Its official prefix is si .","title":"signals.lib"},{"location":"libs/signals/#functions-reference","text":"","title":"Functions Reference"},{"location":"libs/signals/#sibus","text":"Put n cables in parallel. bus is a standard Faust function.","title":"(si.)bus"},{"location":"libs/signals/#usage","text":"bus(N) bus(4) : _,_,_,_ Where: N : is an integer known at compile time that indicates the number of parallel cables","title":"Usage"},{"location":"libs/signals/#siblock","text":"Block - terminate N signals. block is a standard Faust function.","title":"(si.)block"},{"location":"libs/signals/#usage_1","text":"_,_,... : block(n) : _,... Where: N : the number of signals to be blocked known at compile time","title":"Usage"},{"location":"libs/signals/#siinterpolate","text":"Linear interpolation between two signals.","title":"(si.)interpolate"},{"location":"libs/signals/#usage_2","text":"_,_ : interpolate(i) : _ Where: i : interpolation control between 0 and 1 (0: first input; 1: second input)","title":"Usage"},{"location":"libs/signals/#sismoo","text":"Smoothing function based on smooth ideal to smooth UI signals (sliders, etc.) down. smoo is a standard Faust function.","title":"(si.)smoo"},{"location":"libs/signals/#usage_3","text":"hslider(...) : smoo;","title":"Usage"},{"location":"libs/signals/#sipolysmooth","text":"A smoothing function based on smooth that doesn't smooth when a trigger signal is given. This is very useful when making polyphonic synthesizer to make sure that the value of the parameter is the right one when the note is started.","title":"(si.)polySmooth"},{"location":"libs/signals/#usage_4","text":"hslider(...) : polySmooth(g,s,d) : _ Where: g : the gate/trigger signal used when making polyphonic synths s : the smoothness (see smooth ) d : the number of samples to wait before the signal start being smoothed after g switched to 1","title":"Usage"},{"location":"libs/signals/#sismoothandh","text":"A smoothing function based on smooth that holds its output signal when a trigger is sent to it. This feature is convenient when implementing polyphonic instruments to prevent some smoothed parameter to change when a note-off event is sent.","title":"(si.)smoothAndH"},{"location":"libs/signals/#usage_5","text":"hslider(...) : smoothAndH(g,s) : _ Where: g : the hold signal (0 for hold, 1 for bypass) s : the smoothness (see smooth )","title":"Usage"},{"location":"libs/signals/#sibsmooth","text":"Block smooth linear interpolation during a block of samples.","title":"(si.)bsmooth"},{"location":"libs/signals/#usage_6","text":"hslider(...) : bsmooth : _","title":"Usage"},{"location":"libs/signals/#sidot","text":"Dot product for two vectors of size N.","title":"(si.)dot"},{"location":"libs/signals/#usage_7","text":"_,_,_,_,_,_ : dot(N) : _ Where: N : size of the vectors (int, must be known at compile time)","title":"Usage"},{"location":"libs/signals/#sismooth","text":"Exponential smoothing by a unity-dc-gain one-pole lowpass. smooth is a standard Faust function.","title":"(si.)smooth"},{"location":"libs/signals/#usage_8","text":"_ : smooth(tau2pole(tau)) : _ Where: tau : desired smoothing time constant in seconds, or hslider(...) : smooth(s) : _ Where: s : smoothness between 0 and 1. s=0 for no smoothing, s=0.999 is \"very smooth\", s>1 is unstable, and s=1 yields the zero signal for all inputs. The exponential time-constant is approximately 1/(1-s) samples, when s is close to (but less than) 1.","title":"Usage:"},{"location":"libs/signals/#reference","text":"https://ccrma.stanford.edu/~jos/mdft/Convolution_Example_2_ADSR.html","title":"Reference:"},{"location":"libs/signals/#sicbus","text":"n parallel cables for complex signals. cbus is a standard Faust function.","title":"(si.)cbus"},{"location":"libs/signals/#usage_9","text":"cbus(n) cbus(4) : (r0,i0), (r1,i1), (r2,i2), (r3,i3) Where: n : is an integer known at compile time that indicates the number of parallel cables. each complex number is represented by two real signals as (real,imag)","title":"Usage"},{"location":"libs/signals/#sicmul","text":"multiply two complex signals pointwise. cmul is a standard Faust function.","title":"(si.)cmul"},{"location":"libs/signals/#usage_10","text":"(r1,i1) : cmul(r2,i2) : (_,_); Where: Each complex number is represented by two real signals as (real,imag), so (r1,i1) = real and imaginary parts of signal 1 (r2,i2) = real and imaginary parts of signal 2","title":"Usage"},{"location":"libs/signals/#sicconj","text":"complex conjugation of a (complex) signal. cconj is a standard Faust function.","title":"(si.)cconj"},{"location":"libs/signals/#usage_11","text":"(r1,i1) : cconj : (_,_); Where: Each complex number is represented by two real signals as (real,imag), so (r1,i1) = real and imaginary parts of the input signal (r1,-i1) = real and imaginary parts of the output signal","title":"Usage"},{"location":"libs/signals/#silag_ud","text":"Lag filter with separate times for up and down.","title":"(si.)lag_ud"},{"location":"libs/signals/#usage_12","text":"_ : lag_ud(up, dn) : _;","title":"Usage"},{"location":"libs/signals/#sirev","text":"Reverse the input signal by blocks of N>0 samples. rev(1) is the indentity function. rev(N) has a latency of N-1 samples.","title":"(si.)rev"},{"location":"libs/signals/#usage_13","text":"_ : rev(N) : _; Where: N : the block size","title":"Usage"},{"location":"libs/soundfiles/","text":"soundfiles.lib A library to handle soundfiles in Faust. Its official prefix is so . Functions Reference (so.)loop Play a soundfile in a loop taking into account its sampling rate. loop is a standard Faust function. Usage loop(sf, part) Where: sf : the soundfile part : the part in the soundfile list of sounds (so.)loop_speed Play a soundfile in a loop taking into account its sampling rate, with speed control. loop_speed is a standard Faust function. Usage loop_speed(sf, part, speed) Where: sf : the soundfile part : the part in the soundfile list of sounds speed : the speed between 0 and n (so.)loop_speed_level Play a soundfile in a loop taking into account its sampling rate, with speed and level controls. loop_speed_level is a standard Faust function. Usage loop_speed_level(sf, part, speed, level) Where: sf : the soundfile part : the part in the soundfile list of sounds speed : the speed between 0 and n level : the volume between 0 and n","title":" soundfiles "},{"location":"libs/soundfiles/#soundfileslib","text":"A library to handle soundfiles in Faust. Its official prefix is so .","title":"soundfiles.lib"},{"location":"libs/soundfiles/#functions-reference","text":"","title":"Functions Reference"},{"location":"libs/soundfiles/#soloop","text":"Play a soundfile in a loop taking into account its sampling rate. loop is a standard Faust function.","title":"(so.)loop"},{"location":"libs/soundfiles/#usage","text":"loop(sf, part) Where: sf : the soundfile part : the part in the soundfile list of sounds","title":"Usage"},{"location":"libs/soundfiles/#soloop_speed","text":"Play a soundfile in a loop taking into account its sampling rate, with speed control. loop_speed is a standard Faust function.","title":"(so.)loop_speed"},{"location":"libs/soundfiles/#usage_1","text":"loop_speed(sf, part, speed) Where: sf : the soundfile part : the part in the soundfile list of sounds speed : the speed between 0 and n","title":"Usage"},{"location":"libs/soundfiles/#soloop_speed_level","text":"Play a soundfile in a loop taking into account its sampling rate, with speed and level controls. loop_speed_level is a standard Faust function.","title":"(so.)loop_speed_level"},{"location":"libs/soundfiles/#usage_2","text":"loop_speed_level(sf, part, speed, level) Where: sf : the soundfile part : the part in the soundfile list of sounds speed : the speed between 0 and n level : the volume between 0 and n","title":"Usage"},{"location":"libs/spats/","text":"spats.lib This library contains a collection of tools for sound spatialization. Its official prefix is sp . (sp.)panner A simple linear stereo panner. panner is a standard Faust function. Usage _ : panner(g) : _,_ Where: g : the panning (0-1) (sp.)spat GMEM SPAT: n-outputs spatializer. spat is a standard Faust function. Usage _ : spat(n,r,d) : _,_,... Where: n : number of outputs r : rotation (between 0 et 1) d : distance of the source (between 0 et 1) (sp.)stereoize Transform an arbitrary processor p into a stereo processor with 2 inputs and 2 outputs. Usage _,_ : stereoize(p) : _,_ Where: p : the arbitrary processor","title":" spats "},{"location":"libs/spats/#spatslib","text":"This library contains a collection of tools for sound spatialization. Its official prefix is sp .","title":"spats.lib"},{"location":"libs/spats/#sppanner","text":"A simple linear stereo panner. panner is a standard Faust function.","title":"(sp.)panner"},{"location":"libs/spats/#usage","text":"_ : panner(g) : _,_ Where: g : the panning (0-1)","title":"Usage"},{"location":"libs/spats/#spspat","text":"GMEM SPAT: n-outputs spatializer. spat is a standard Faust function.","title":"(sp.)spat"},{"location":"libs/spats/#usage_1","text":"_ : spat(n,r,d) : _,_,... Where: n : number of outputs r : rotation (between 0 et 1) d : distance of the source (between 0 et 1)","title":"Usage"},{"location":"libs/spats/#spstereoize","text":"Transform an arbitrary processor p into a stereo processor with 2 inputs and 2 outputs.","title":"(sp.)stereoize"},{"location":"libs/spats/#usage_2","text":"_,_ : stereoize(p) : _,_ Where: p : the arbitrary processor","title":"Usage"},{"location":"libs/synths/","text":"synths.lib This library contains a collection of synthesizers. Its official prefix is sy . (sy.)popFilterPerc A simple percussion instrument based on a \"popped\" resonant bandpass filter. popFilterPerc is a standard Faust function. Usage popFilterDrum(freq,q,gate) : _; Where: freq : the resonance frequency of the instrument q : the q of the res filter (typically, 5 is a good value) gate : the trigger signal (0 or 1) (sy.)dubDub A simple synth based on a sawtooth wave filtered by a resonant lowpass. dubDub is a standard Faust function. Usage dubDub(freq,ctFreq,q,gate) : _; Where: freq : frequency of the sawtooth ctFreq : cutoff frequency of the filter q : Q of the filter gate : the trigger signal (0 or 1) (sy.)sawTrombone A simple trombone based on a lowpassed sawtooth wave. sawTrombone is a standard Faust function. Usage sawTrombone(att,freq,gain,gate) : _ Where: att : exponential attack duration in s (typically 0.01) freq : the frequency gain : the gain (0-1) gate : the gate (0 or 1) (sy.)combString Simplest string physical model ever based on a comb filter. combString is a standard Faust function. Usage combString(freq,res,gate) : _; Where: freq : the frequency of the string res : string T60 (resonance time) in second gate : trigger signal (0 or 1) (sy.)additiveDrum A simple drum using additive synthesis. additiveDrum is a standard Faust function. Usage additiveDrum(freq,freqRatio,gain,harmDec,att,rel,gate) : _ Where: freq : the resonance frequency of the drum freqRatio : a list of ratio to choose the frequency of the mode in function of freq e.g.(1 1.2 1.5 ...). The first element should always gain : the gain of each mode as a list (1 0.9 0.8 ...). The first element harmDec : harmonic decay ratio (0-1): configure the speed at which att : attack duration in second rel : release duration in second gate : trigger signal (0 or 1) (sy.)fm An FM synthesizer with an arbitrary number of modulators connected as a sequence. fm is a standard Faust function. Usage freqs = (300,400,...); indices = (20,...); fm(freqs,indices) : _ Where: freqs : a list of frequencies where the first one is the frequency of the carrier indices : the indices of modulation (Nfreqs-1)","title":" synths "},{"location":"libs/synths/#synthslib","text":"This library contains a collection of synthesizers. Its official prefix is sy .","title":"synths.lib"},{"location":"libs/synths/#sypopfilterperc","text":"A simple percussion instrument based on a \"popped\" resonant bandpass filter. popFilterPerc is a standard Faust function.","title":"(sy.)popFilterPerc"},{"location":"libs/synths/#usage","text":"popFilterDrum(freq,q,gate) : _; Where: freq : the resonance frequency of the instrument q : the q of the res filter (typically, 5 is a good value) gate : the trigger signal (0 or 1)","title":"Usage"},{"location":"libs/synths/#sydubdub","text":"A simple synth based on a sawtooth wave filtered by a resonant lowpass. dubDub is a standard Faust function.","title":"(sy.)dubDub"},{"location":"libs/synths/#usage_1","text":"dubDub(freq,ctFreq,q,gate) : _; Where: freq : frequency of the sawtooth ctFreq : cutoff frequency of the filter q : Q of the filter gate : the trigger signal (0 or 1)","title":"Usage"},{"location":"libs/synths/#sysawtrombone","text":"A simple trombone based on a lowpassed sawtooth wave. sawTrombone is a standard Faust function.","title":"(sy.)sawTrombone"},{"location":"libs/synths/#usage_2","text":"sawTrombone(att,freq,gain,gate) : _ Where: att : exponential attack duration in s (typically 0.01) freq : the frequency gain : the gain (0-1) gate : the gate (0 or 1)","title":"Usage"},{"location":"libs/synths/#sycombstring","text":"Simplest string physical model ever based on a comb filter. combString is a standard Faust function.","title":"(sy.)combString"},{"location":"libs/synths/#usage_3","text":"combString(freq,res,gate) : _; Where: freq : the frequency of the string res : string T60 (resonance time) in second gate : trigger signal (0 or 1)","title":"Usage"},{"location":"libs/synths/#syadditivedrum","text":"A simple drum using additive synthesis. additiveDrum is a standard Faust function.","title":"(sy.)additiveDrum"},{"location":"libs/synths/#usage_4","text":"additiveDrum(freq,freqRatio,gain,harmDec,att,rel,gate) : _ Where: freq : the resonance frequency of the drum freqRatio : a list of ratio to choose the frequency of the mode in function of freq e.g.(1 1.2 1.5 ...). The first element should always gain : the gain of each mode as a list (1 0.9 0.8 ...). The first element harmDec : harmonic decay ratio (0-1): configure the speed at which att : attack duration in second rel : release duration in second gate : trigger signal (0 or 1)","title":"Usage"},{"location":"libs/synths/#syfm","text":"An FM synthesizer with an arbitrary number of modulators connected as a sequence. fm is a standard Faust function.","title":"(sy.)fm"},{"location":"libs/synths/#usage_5","text":"freqs = (300,400,...); indices = (20,...); fm(freqs,indices) : _ Where: freqs : a list of frequencies where the first one is the frequency of the carrier indices : the indices of modulation (Nfreqs-1)","title":"Usage"},{"location":"libs/vaeffects/","text":"vaeffects.lib A library of virtual analog filter effects. Its official prefix is ve . Moog Filters (ve.)moog_vcf Moog \"Voltage Controlled Filter\" (VCF) in \"analog\" form. Moog VCF implemented using the same logical block diagram as the classic analog circuit. As such, it neglects the one-sample delay associated with the feedback path around the four one-poles. This extra delay alters the response, especially at high frequencies (see reference [1] for details). See moog_vcf_2b below for a more accurate implementation. Usage moog_vcf(res,fr) Where: res : normalized amount of corner-resonance between 0 and 1 (0 is no resonance, 1 is maximum) fr : corner-resonance frequency in Hz (less than SR/6.3 or so) References https://ccrma.stanford.edu/~stilti/papers/moogvcf.pdf https://ccrma.stanford.edu/~jos/pasp/vegf.html (ve.)moog_vcf_2b[n] Moog \"Voltage Controlled Filter\" (VCF) as two biquads. Implementation of the ideal Moog VCF transfer function factored into second-order sections. As a result, it is more accurate than moog_vcf above, but its coefficient formulas are more complex when one or both parameters are varied. Here, res is the fourth root of that in moog_vcf , so, as the sampling rate approaches infinity, moog_vcf(res,fr) becomes equivalent to moog_vcf_2b[n](res^4,fr) (when res and fr are constant). moog_vcf_2b uses two direct-form biquads ( tf2 ). moog_vcf_2bn uses two protected normalized-ladder biquads ( tf2np ). Usage moog_vcf_2b(res,fr) moog_vcf_2bn(res,fr) Where: res : normalized amount of corner-resonance between 0 and 1 (0 is min resonance, 1 is maximum) fr : corner-resonance frequency in Hz (ve.)moogLadder Virtual analog model of the 4th-order Moog Ladder, which is arguably the most well-known ladder filter in analog synthesizers. Several 1st-order filters are cascaded in series. Feedback is then used, in part, to control the cut-off frequency and the resonance. This filter was implemented in Faust by Eric Tarr during the 2019 Embedded DSP With Faust Workshop . References https://www.willpirkle.com/706-2/ http://www.willpirkle.com/Downloads/AN-4VirtualAnalogFilters.pdf Usage _ : moogLadder(normFreq,Q) : _ Where: normFreq : normalized frequency (0-1) Q : q (ve.)moogHalfLadder Virtual analog model of the 2nd-order Moog Half Ladder (simplified version of (ve.)moogLadder ). Several 1st-order filters are cascaded in series. Feedback is then used, in part, to control the cut-off frequency and the resonance. This filter was implemented in Faust by Eric Tarr during the 2019 Embedded DSP With Faust Workshop . References https://www.willpirkle.com/app-notes/virtual-analog-moog-half-ladder-filter http://www.willpirkle.com/Downloads/AN-8MoogHalfLadderFilter.pdf Usage _ : moogHalfLadder(normFreq,Q) : _ Where: normFreq : normalized frequency (0-1) Q : q (ve.)diodeLadder 4th order virtual analog diode ladder filter. In addition to the individual states used within each independent 1st-order filter, there are also additional feedback paths found in the block diagram. These feedback paths are labeled as connecting states. Rather than separately storing these connecting states in the Faust implementation, they are simply implicitly calculated by tracing back to the other states ( s1 , s2 , s3 , s4 ) each recursive step. This filter was implemented in Faust by Eric Tarr during the 2019 Embedded DSP With Faust Workshop . References https://www.willpirkle.com/virtual-analog-diode-ladder-filter/ http://www.willpirkle.com/Downloads/AN-6DiodeLadderFilter.pdf Usage _ : diodeLadder(normFreq,Q) : _ Where: normFreq : normalized frequency (0-1) Q : q Korg 35 Filters The following filters are virtual analog models of the Korg 35 low-pass filter and high-pass filter found in the MS-10 and MS-20 synthesizers. The virtual analog models for the LPF and HPF are different, making these filters more interesting than simply tapping different states of the same circuit. These filters were implemented in Faust by Eric Tarr during the 2019 Embedded DSP With Faust Workshop . Filter history: https://secretlifeofsynthesizers.com/the-korg-35-filter/ (ve.)korg35LPF Virtual analog models of the Korg 35 low-pass filter found in the MS-10 and MS-20 synthesizers. Usage _ : korg35LPF(normFreq,Q) : _ Where: normFreq : normalized frequency (0-1) Q : q (ve.)korg35HPF Virtual analog models of the Korg 35 high-pass filter found in the MS-10 and MS-20 synthesizers. Usage _ : korg35HPF(normFreq,Q) : _ Where: normFreq : normalized frequency (0-1) Q : q Oberheim Filters The following filter (4 types) is an implementation of the virtual analog model described in Section 7.2 of the Will Pirkle book, \"Designing Software Synthesizer Plug-ins in C++\". It is based on the block diagram in Figure 7.5. The Oberheim filter is a state-variable filter with soft-clipping distortion within the circuit. In many VA filters, distortion is accomplished using the \"tanh\" function. For this Faust implementation, that distortion function was replaced with the (ef.)cubicnl function. (ve.)oberheim Generic multi-outputs Oberheim filter that produces the BSF, BPF, HPF and LPF outputs (see description above). Usage _ : oberheim(normFreq,Q) : _,_,_,_ Where: normFreq : normalized frequency (0-1) Q : q (ve.)oberheimBSF Band-Stop Oberheim filter (see description above). Specialize the generic implementation: keep the first BSF output, the compiler will only generate the needed code. Usage _ : oberheimBSF(normFreq,Q) : _ Where: normFreq : normalized frequency (0-1) Q : q (ve.)oberheimBPF Band-Pass Oberheim filter (see description above). Specialize the generic implementation: keep the second BPF output, the compiler will only generate the needed code. Usage _ : oberheimBPF(normFreq,Q) : _ Where: normFreq : normalized frequency (0-1) Q : q (ve.)oberheimHPF High-Pass Oberheim filter (see description above). Specialize the generic implementation: keep the third HPF output, the compiler will only generate the needed code. Usage _ : oberheimHPF(normFreq,Q) : _ Where: normFreq : normalized frequency (0-1) Q : q (ve.)oberheimLPF Low-Pass Oberheim filter (see description above). Specialize the generic implementation: keep the fourth LPF output, the compiler will only generate the needed code. Usage _ : oberheimLPF(normFreq,Q) : _ Where: normFreq : normalized frequency (0-1) Q : q Sallen Key Filters The following filters were implemented based on VA models of synthesizer filters. The modeling approach is based on a Topology Preserving Transform (TPT) to resolve the delay-free feedback loop in the corresponding analog filters. The primary processing block used to build other filters (Moog, Korg, etc.) is based on a 1st-order Sallen-Key filter. The filters included in this script are 1st-order LPF/HPF and 2nd-order state-variable filters capable of LPF, HPF, and BPF. Resources: Vadim Zavalishin (2018) \"The Art of VA Filter Design\", v2.1.0 https://www.native-instruments.com/fileadmin/ni_media/downloads/pdf/VAFilterDesign_2.1.0.pdf Will Pirkle (2014) \"Resolving Delay-Free Loops in Recursive Filters Using the Modified H\u00e4rm\u00e4 Method\", AES 137 http://www.aes.org/e-lib/browse.cfm?elib=17517 Description and diagrams of 1st- and 2nd-order TPT filters: https://www.willpirkle.com/706-2/ (ve.)sallenKeyOnePole Sallen-Key generic One Pole filter that produces the LPF and HPF outputs (see description above). For the Faust implementation of this filter, recursion ( letrec ) is used for storing filter \"states\". The output (e.g. y ) is calculated by using the input signal and the previous states of the filter. During the current recursive step, the states of the filter (e.g. s ) for the next step are also calculated. Admittedly, this is not an efficient way to implement a filter because it requires independently calculating the output and each state during each recursive step. However, it works as a way to store and use \"states\" within the constraints of Faust. The simplest example is the 1st-order LPF (shown on the cover of Zavalishin * 2018 and Fig 4.3 of https://www.willpirkle.com/706-2/ ). Here, the input signal is split in parallel for the calculation of the output signal, y , and the state s . The value of the state is only used for feedback to the next step of recursion. It is blocked (!) from also being routed to the output. A trick used for calculating the state s is to observe that the input to the delay block is the sum of two signal: what appears to be a feedforward path and a feedback path. In reality, the signals being summed are identical (signal*2) plus the value of the current state. Usage _ : sallenKeyOnePole(normFreq) : _,_ Where: normFreq : normalized frequency (0-1) (ve.)sallenKeyOnePoleLPF Sallen-Key One Pole lowpass filter (see description above). Specialize the generic implementation: keep the first LPF output, the compiler will only generate the needed code. Usage _ : sallenKeyOnePoleLPF(normFreq) : _ Where: normFreq : normalized frequency (0-1) (ve.)sallenKeyOnePoleHPF Sallen-Key One Pole Highpass filter (see description above). The dry input signal is routed in parallel to the output. The LPF'd signal is subtracted from the input so that the HPF remains. Specialize the generic implementation: keep the second HPF output, the compiler will only generate the needed code. Usage _ : sallenKeyOnePoleHPF(normFreq) : _ Where: normFreq : normalized frequency (0-1) (ve.)sallenKey2ndOrder Sallen-Key generic 2nd order filter that produces the LPF, BPF and HPF outputs. This is a 2nd-order Sallen-Key state-variable filter. The idea is that by \"tapping\" into different points in the circuit, different filters (LPF,BPF,HPF) can be achieved. See Figure 4.6 of * https://www.willpirkle.com/706-2/ This is also a good example of the next step for generalizing the Faust programming approach used for all these VA filters. In this case, there are three things to calculate each recursive step ( y , s1 , s2 ). For each thing, the circuit is only calculated up to that point. Comparing the LPF to BPF, the output signal ( y ) is calculated similarly. Except, the output of the BPF stops earlier in the circuit. Similarly, the states ( s1 and s2 ) only differ in that s2 includes a couple more terms beyond what is used for s1 . Usage _ : sallenKey2ndOrder(normFreq,Q) : _,_,_ Where: normFreq : normalized frequency (0-1) Q : q (ve.)sallenKey2ndOrderLPF Sallen-Key 2nd order lowpass filter (see description above). Specialize the generic implementation: keep the first LPF output, the compiler will only generate the needed code. Usage _ : sallenKey2ndOrderLPF(normFreq,Q) : _ Where: normFreq : normalized frequency (0-1) Q : q (ve.)sallenKey2ndOrderBPF Sallen-Key 2nd order bandpass filter (see description above). Specialize the generic implementation: keep the second BPF output, the compiler will only generate the needed code. Usage _ : sallenKey2ndOrderBPF(normFreq,Q) : _ Where: normFreq : normalized frequency (0-1) Q : q (ve.)sallenKey2ndOrderHPF Sallen-Key 2nd order highpass filter (see description above). Specialize the generic implementation: keep the third HPF output, the compiler will only generate the needed code. Usage _ : sallenKey2ndOrderHPF(normFreq,Q) : _ Where: normFreq : normalized frequency (0-1) Q : q Effects (ve.)wah4 Wah effect, 4th order. wah4 is a standard Faust function. Usage _ : wah4(fr) : _ Where: fr : resonance frequency in Hz Reference https://ccrma.stanford.edu/~jos/pasp/vegf.html (ve.)autowah Auto-wah effect. autowah is a standard Faust function. Usage _ : autowah(level) : _ Where: level : amount of effect desired (0 to 1). (ve.)crybaby Digitized CryBaby wah pedal. crybaby is a standard Faust function. Usage _ : crybaby(wah) : _ Where: wah : \"pedal angle\" from 0 to 1 Reference https://ccrma.stanford.edu/~jos/pasp/vegf.html (ve.)vocoder A very simple vocoder where the spectrum of the modulation signal is analyzed using a filter bank. vocoder is a standard Faust function. Usage _ : vocoder(nBands,att,rel,BWRatio,source,excitation) : _; Where: nBands : Number of vocoder bands att : Attack time in seconds rel : Release time in seconds BWRatio : Coefficient to adjust the bandwidth of each band (0.1 - 2) source : Modulation signal excitation : Excitation/Carrier signal","title":" vaeffects "},{"location":"libs/vaeffects/#vaeffectslib","text":"A library of virtual analog filter effects. Its official prefix is ve .","title":"vaeffects.lib"},{"location":"libs/vaeffects/#moog-filters","text":"","title":"Moog Filters"},{"location":"libs/vaeffects/#vemoog_vcf","text":"Moog \"Voltage Controlled Filter\" (VCF) in \"analog\" form. Moog VCF implemented using the same logical block diagram as the classic analog circuit. As such, it neglects the one-sample delay associated with the feedback path around the four one-poles. This extra delay alters the response, especially at high frequencies (see reference [1] for details). See moog_vcf_2b below for a more accurate implementation.","title":"(ve.)moog_vcf"},{"location":"libs/vaeffects/#usage","text":"moog_vcf(res,fr) Where: res : normalized amount of corner-resonance between 0 and 1 (0 is no resonance, 1 is maximum) fr : corner-resonance frequency in Hz (less than SR/6.3 or so)","title":"Usage"},{"location":"libs/vaeffects/#references","text":"https://ccrma.stanford.edu/~stilti/papers/moogvcf.pdf https://ccrma.stanford.edu/~jos/pasp/vegf.html","title":"References"},{"location":"libs/vaeffects/#vemoog_vcf_2bn","text":"Moog \"Voltage Controlled Filter\" (VCF) as two biquads. Implementation of the ideal Moog VCF transfer function factored into second-order sections. As a result, it is more accurate than moog_vcf above, but its coefficient formulas are more complex when one or both parameters are varied. Here, res is the fourth root of that in moog_vcf , so, as the sampling rate approaches infinity, moog_vcf(res,fr) becomes equivalent to moog_vcf_2b[n](res^4,fr) (when res and fr are constant). moog_vcf_2b uses two direct-form biquads ( tf2 ). moog_vcf_2bn uses two protected normalized-ladder biquads ( tf2np ).","title":"(ve.)moog_vcf_2b[n]"},{"location":"libs/vaeffects/#usage_1","text":"moog_vcf_2b(res,fr) moog_vcf_2bn(res,fr) Where: res : normalized amount of corner-resonance between 0 and 1 (0 is min resonance, 1 is maximum) fr : corner-resonance frequency in Hz","title":"Usage"},{"location":"libs/vaeffects/#vemoogladder","text":"Virtual analog model of the 4th-order Moog Ladder, which is arguably the most well-known ladder filter in analog synthesizers. Several 1st-order filters are cascaded in series. Feedback is then used, in part, to control the cut-off frequency and the resonance. This filter was implemented in Faust by Eric Tarr during the 2019 Embedded DSP With Faust Workshop .","title":"(ve.)moogLadder"},{"location":"libs/vaeffects/#references_1","text":"https://www.willpirkle.com/706-2/ http://www.willpirkle.com/Downloads/AN-4VirtualAnalogFilters.pdf","title":"References"},{"location":"libs/vaeffects/#usage_2","text":"_ : moogLadder(normFreq,Q) : _ Where: normFreq : normalized frequency (0-1) Q : q","title":"Usage"},{"location":"libs/vaeffects/#vemooghalfladder","text":"Virtual analog model of the 2nd-order Moog Half Ladder (simplified version of (ve.)moogLadder ). Several 1st-order filters are cascaded in series. Feedback is then used, in part, to control the cut-off frequency and the resonance. This filter was implemented in Faust by Eric Tarr during the 2019 Embedded DSP With Faust Workshop .","title":"(ve.)moogHalfLadder"},{"location":"libs/vaeffects/#references_2","text":"https://www.willpirkle.com/app-notes/virtual-analog-moog-half-ladder-filter http://www.willpirkle.com/Downloads/AN-8MoogHalfLadderFilter.pdf","title":"References"},{"location":"libs/vaeffects/#usage_3","text":"_ : moogHalfLadder(normFreq,Q) : _ Where: normFreq : normalized frequency (0-1) Q : q","title":"Usage"},{"location":"libs/vaeffects/#vediodeladder","text":"4th order virtual analog diode ladder filter. In addition to the individual states used within each independent 1st-order filter, there are also additional feedback paths found in the block diagram. These feedback paths are labeled as connecting states. Rather than separately storing these connecting states in the Faust implementation, they are simply implicitly calculated by tracing back to the other states ( s1 , s2 , s3 , s4 ) each recursive step. This filter was implemented in Faust by Eric Tarr during the 2019 Embedded DSP With Faust Workshop .","title":"(ve.)diodeLadder"},{"location":"libs/vaeffects/#references_3","text":"https://www.willpirkle.com/virtual-analog-diode-ladder-filter/ http://www.willpirkle.com/Downloads/AN-6DiodeLadderFilter.pdf","title":"References"},{"location":"libs/vaeffects/#usage_4","text":"_ : diodeLadder(normFreq,Q) : _ Where: normFreq : normalized frequency (0-1) Q : q","title":"Usage"},{"location":"libs/vaeffects/#korg-35-filters","text":"The following filters are virtual analog models of the Korg 35 low-pass filter and high-pass filter found in the MS-10 and MS-20 synthesizers. The virtual analog models for the LPF and HPF are different, making these filters more interesting than simply tapping different states of the same circuit. These filters were implemented in Faust by Eric Tarr during the 2019 Embedded DSP With Faust Workshop .","title":"Korg 35 Filters"},{"location":"libs/vaeffects/#filter-history","text":"https://secretlifeofsynthesizers.com/the-korg-35-filter/","title":"Filter history:"},{"location":"libs/vaeffects/#vekorg35lpf","text":"Virtual analog models of the Korg 35 low-pass filter found in the MS-10 and MS-20 synthesizers.","title":"(ve.)korg35LPF"},{"location":"libs/vaeffects/#usage_5","text":"_ : korg35LPF(normFreq,Q) : _ Where: normFreq : normalized frequency (0-1) Q : q","title":"Usage"},{"location":"libs/vaeffects/#vekorg35hpf","text":"Virtual analog models of the Korg 35 high-pass filter found in the MS-10 and MS-20 synthesizers.","title":"(ve.)korg35HPF"},{"location":"libs/vaeffects/#usage_6","text":"_ : korg35HPF(normFreq,Q) : _ Where: normFreq : normalized frequency (0-1) Q : q","title":"Usage"},{"location":"libs/vaeffects/#oberheim-filters","text":"The following filter (4 types) is an implementation of the virtual analog model described in Section 7.2 of the Will Pirkle book, \"Designing Software Synthesizer Plug-ins in C++\". It is based on the block diagram in Figure 7.5. The Oberheim filter is a state-variable filter with soft-clipping distortion within the circuit. In many VA filters, distortion is accomplished using the \"tanh\" function. For this Faust implementation, that distortion function was replaced with the (ef.)cubicnl function.","title":"Oberheim Filters"},{"location":"libs/vaeffects/#veoberheim","text":"Generic multi-outputs Oberheim filter that produces the BSF, BPF, HPF and LPF outputs (see description above).","title":"(ve.)oberheim"},{"location":"libs/vaeffects/#usage_7","text":"_ : oberheim(normFreq,Q) : _,_,_,_ Where: normFreq : normalized frequency (0-1) Q : q","title":"Usage"},{"location":"libs/vaeffects/#veoberheimbsf","text":"Band-Stop Oberheim filter (see description above). Specialize the generic implementation: keep the first BSF output, the compiler will only generate the needed code.","title":"(ve.)oberheimBSF"},{"location":"libs/vaeffects/#usage_8","text":"_ : oberheimBSF(normFreq,Q) : _ Where: normFreq : normalized frequency (0-1) Q : q","title":"Usage"},{"location":"libs/vaeffects/#veoberheimbpf","text":"Band-Pass Oberheim filter (see description above). Specialize the generic implementation: keep the second BPF output, the compiler will only generate the needed code.","title":"(ve.)oberheimBPF"},{"location":"libs/vaeffects/#usage_9","text":"_ : oberheimBPF(normFreq,Q) : _ Where: normFreq : normalized frequency (0-1) Q : q","title":"Usage"},{"location":"libs/vaeffects/#veoberheimhpf","text":"High-Pass Oberheim filter (see description above). Specialize the generic implementation: keep the third HPF output, the compiler will only generate the needed code.","title":"(ve.)oberheimHPF"},{"location":"libs/vaeffects/#usage_10","text":"_ : oberheimHPF(normFreq,Q) : _ Where: normFreq : normalized frequency (0-1) Q : q","title":"Usage"},{"location":"libs/vaeffects/#veoberheimlpf","text":"Low-Pass Oberheim filter (see description above). Specialize the generic implementation: keep the fourth LPF output, the compiler will only generate the needed code.","title":"(ve.)oberheimLPF"},{"location":"libs/vaeffects/#usage_11","text":"_ : oberheimLPF(normFreq,Q) : _ Where: normFreq : normalized frequency (0-1) Q : q","title":"Usage"},{"location":"libs/vaeffects/#sallen-key-filters","text":"The following filters were implemented based on VA models of synthesizer filters. The modeling approach is based on a Topology Preserving Transform (TPT) to resolve the delay-free feedback loop in the corresponding analog filters. The primary processing block used to build other filters (Moog, Korg, etc.) is based on a 1st-order Sallen-Key filter. The filters included in this script are 1st-order LPF/HPF and 2nd-order state-variable filters capable of LPF, HPF, and BPF.","title":"Sallen Key Filters"},{"location":"libs/vaeffects/#resources","text":"Vadim Zavalishin (2018) \"The Art of VA Filter Design\", v2.1.0 https://www.native-instruments.com/fileadmin/ni_media/downloads/pdf/VAFilterDesign_2.1.0.pdf Will Pirkle (2014) \"Resolving Delay-Free Loops in Recursive Filters Using the Modified H\u00e4rm\u00e4 Method\", AES 137 http://www.aes.org/e-lib/browse.cfm?elib=17517 Description and diagrams of 1st- and 2nd-order TPT filters: https://www.willpirkle.com/706-2/","title":"Resources:"},{"location":"libs/vaeffects/#vesallenkeyonepole","text":"Sallen-Key generic One Pole filter that produces the LPF and HPF outputs (see description above). For the Faust implementation of this filter, recursion ( letrec ) is used for storing filter \"states\". The output (e.g. y ) is calculated by using the input signal and the previous states of the filter. During the current recursive step, the states of the filter (e.g. s ) for the next step are also calculated. Admittedly, this is not an efficient way to implement a filter because it requires independently calculating the output and each state during each recursive step. However, it works as a way to store and use \"states\" within the constraints of Faust. The simplest example is the 1st-order LPF (shown on the cover of Zavalishin * 2018 and Fig 4.3 of https://www.willpirkle.com/706-2/ ). Here, the input signal is split in parallel for the calculation of the output signal, y , and the state s . The value of the state is only used for feedback to the next step of recursion. It is blocked (!) from also being routed to the output. A trick used for calculating the state s is to observe that the input to the delay block is the sum of two signal: what appears to be a feedforward path and a feedback path. In reality, the signals being summed are identical (signal*2) plus the value of the current state.","title":"(ve.)sallenKeyOnePole"},{"location":"libs/vaeffects/#usage_12","text":"_ : sallenKeyOnePole(normFreq) : _,_ Where: normFreq : normalized frequency (0-1)","title":"Usage"},{"location":"libs/vaeffects/#_1","text":"","title":""},{"location":"libs/vaeffects/#vesallenkeyonepolelpf","text":"Sallen-Key One Pole lowpass filter (see description above). Specialize the generic implementation: keep the first LPF output, the compiler will only generate the needed code.","title":"(ve.)sallenKeyOnePoleLPF"},{"location":"libs/vaeffects/#usage_13","text":"_ : sallenKeyOnePoleLPF(normFreq) : _ Where: normFreq : normalized frequency (0-1)","title":"Usage"},{"location":"libs/vaeffects/#_2","text":"","title":""},{"location":"libs/vaeffects/#vesallenkeyonepolehpf","text":"Sallen-Key One Pole Highpass filter (see description above). The dry input signal is routed in parallel to the output. The LPF'd signal is subtracted from the input so that the HPF remains. Specialize the generic implementation: keep the second HPF output, the compiler will only generate the needed code.","title":"(ve.)sallenKeyOnePoleHPF"},{"location":"libs/vaeffects/#usage_14","text":"_ : sallenKeyOnePoleHPF(normFreq) : _ Where: normFreq : normalized frequency (0-1)","title":"Usage"},{"location":"libs/vaeffects/#vesallenkey2ndorder","text":"Sallen-Key generic 2nd order filter that produces the LPF, BPF and HPF outputs. This is a 2nd-order Sallen-Key state-variable filter. The idea is that by \"tapping\" into different points in the circuit, different filters (LPF,BPF,HPF) can be achieved. See Figure 4.6 of * https://www.willpirkle.com/706-2/ This is also a good example of the next step for generalizing the Faust programming approach used for all these VA filters. In this case, there are three things to calculate each recursive step ( y , s1 , s2 ). For each thing, the circuit is only calculated up to that point. Comparing the LPF to BPF, the output signal ( y ) is calculated similarly. Except, the output of the BPF stops earlier in the circuit. Similarly, the states ( s1 and s2 ) only differ in that s2 includes a couple more terms beyond what is used for s1 .","title":"(ve.)sallenKey2ndOrder"},{"location":"libs/vaeffects/#usage_15","text":"_ : sallenKey2ndOrder(normFreq,Q) : _,_,_ Where: normFreq : normalized frequency (0-1) Q : q","title":"Usage"},{"location":"libs/vaeffects/#vesallenkey2ndorderlpf","text":"Sallen-Key 2nd order lowpass filter (see description above). Specialize the generic implementation: keep the first LPF output, the compiler will only generate the needed code.","title":"(ve.)sallenKey2ndOrderLPF"},{"location":"libs/vaeffects/#usage_16","text":"_ : sallenKey2ndOrderLPF(normFreq,Q) : _ Where: normFreq : normalized frequency (0-1) Q : q","title":"Usage"},{"location":"libs/vaeffects/#vesallenkey2ndorderbpf","text":"Sallen-Key 2nd order bandpass filter (see description above). Specialize the generic implementation: keep the second BPF output, the compiler will only generate the needed code.","title":"(ve.)sallenKey2ndOrderBPF"},{"location":"libs/vaeffects/#usage_17","text":"_ : sallenKey2ndOrderBPF(normFreq,Q) : _ Where: normFreq : normalized frequency (0-1) Q : q","title":"Usage"},{"location":"libs/vaeffects/#vesallenkey2ndorderhpf","text":"Sallen-Key 2nd order highpass filter (see description above). Specialize the generic implementation: keep the third HPF output, the compiler will only generate the needed code.","title":"(ve.)sallenKey2ndOrderHPF"},{"location":"libs/vaeffects/#usage_18","text":"_ : sallenKey2ndOrderHPF(normFreq,Q) : _ Where: normFreq : normalized frequency (0-1) Q : q","title":"Usage"},{"location":"libs/vaeffects/#effects","text":"","title":"Effects"},{"location":"libs/vaeffects/#vewah4","text":"Wah effect, 4th order. wah4 is a standard Faust function.","title":"(ve.)wah4"},{"location":"libs/vaeffects/#usage_19","text":"_ : wah4(fr) : _ Where: fr : resonance frequency in Hz","title":"Usage"},{"location":"libs/vaeffects/#reference","text":"https://ccrma.stanford.edu/~jos/pasp/vegf.html","title":"Reference"},{"location":"libs/vaeffects/#veautowah","text":"Auto-wah effect. autowah is a standard Faust function.","title":"(ve.)autowah"},{"location":"libs/vaeffects/#usage_20","text":"_ : autowah(level) : _ Where: level : amount of effect desired (0 to 1).","title":"Usage"},{"location":"libs/vaeffects/#vecrybaby","text":"Digitized CryBaby wah pedal. crybaby is a standard Faust function.","title":"(ve.)crybaby"},{"location":"libs/vaeffects/#usage_21","text":"_ : crybaby(wah) : _ Where: wah : \"pedal angle\" from 0 to 1","title":"Usage"},{"location":"libs/vaeffects/#reference_1","text":"https://ccrma.stanford.edu/~jos/pasp/vegf.html","title":"Reference"},{"location":"libs/vaeffects/#vevocoder","text":"A very simple vocoder where the spectrum of the modulation signal is analyzed using a filter bank. vocoder is a standard Faust function.","title":"(ve.)vocoder"},{"location":"libs/vaeffects/#usage_22","text":"_ : vocoder(nBands,att,rel,BWRatio,source,excitation) : _; Where: nBands : Number of vocoder bands att : Attack time in seconds rel : Release time in seconds BWRatio : Coefficient to adjust the bandwidth of each band (0.1 - 2) source : Modulation signal excitation : Excitation/Carrier signal","title":"Usage"},{"location":"libs/version/","text":"version.lib Semantic versioning for the Faust libraries. Its official prefix is vl . (vl.)version Return the version number of the Faust standard libraries. Usage version : _,_,_","title":"version.lib"},{"location":"libs/version/#versionlib","text":"Semantic versioning for the Faust libraries. Its official prefix is vl .","title":"version.lib"},{"location":"libs/version/#vlversion","text":"Return the version number of the Faust standard libraries.","title":"(vl.)version"},{"location":"libs/version/#usage","text":"version : _,_,_","title":"Usage"},{"location":"libs/wavedigitalfilters/","text":"wavedigitalfilters.lib A library of basic adaptors and methods to help construct Wave Digital Filter models in Faust. Its official prefix is wd . Algebraic One Port Adaptors (wd.)resistor Resistor A basic adaptor implementing a resistor for use within Wave Digital Filter connection trees It should be used as a leaf/terminating element of the connection tree Usage r1(i) = resistor(i, R); buildtree( A : r1 ); Where: i : index used by model-building functions. Should never be user declared. R : Resistance/Impedance of the resistor being modeled in Ohms. Note: The adaptor must be declared as a separate function before integration into the connection tree. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.1 (wd.)resistor_output Resistor + voltage Out A basic adaptor implementing a resistor for use within Wave Digital Filter connection trees It should be used as a leaf/terminating element of the connection tree The resistor will also pass the voltage across itself as an output of the model Usage rout(i) = resistor_output(i, R); buildtree( A : rout ) : _; Where: i : index used by model-building functions. Should never be user declared. R : Resistance/Impedance of the resistor being modeled in Ohms. Note: The adaptor must be declared as a separate function before integration into the connection tree. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.1 (wd.)resistor_output_current Resistor + current Out A basic adaptor implementing a resistor for use within Wave Digital Filter connection trees It should be used as a leaf/terminating element of the connection tree The resistor will also pass the current through itself as an output of the model Usage rout(i) = resistor_output_current(i, R); buildtree( A : rout ) : _; Where: i : index used by model-building functions. Should never be user declared. R : Resistance/Impedance of the resistor being modeled in Ohms. Note: The adaptor must be declared as a separate function before integration into the connection tree. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.1 (wd.)u_voltage Ideal Voltage Source (Unadapted) An adaptor implementing an ideal voltage source within Wave Digital Filter connection trees. It should be used as the root/top element of the connection tree Can be used for either DC (constant) or AC (signal) voltage sources. Usage v1(i) = u_Voltage(i, ein); buildtree( v1 : B ); Where: i : index used by model-building functions. Should never be user declared. ein : Voltage/Potential across ideal voltage source in Volts Note: Only usable as the root of a tree The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.2 (wd.)u_current Resistive Current Source (Unadapted) An unadapted adaptor implementing an ideal current source within Wave Digital Filter connection trees. It should be used as the root/top element of the connection tree Can be used for either DC (constant) or AC (signal) current sources. Usage i1(i) = u_current(i, jin); buildtree( i1 : B ); Where: i : index used by model-building functions. Should never be user declared. jin : Current through the ideal current source in Amps Note: Only usable as the root of a tree The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.3 (wd.)resVoltage Resistive Voltage Source An adaptor implementing a resitive voltage source within Wave Digital Filter connection trees. It should be used as a leaf/terminating element of the connection tree It is comprised of an ideal voltage source in series with a resistor Can be used for either DC (constant) or AC (signal) voltage sources. Usage v1(i) = resVoltage(i, R, ein); buildtree( A : v1 ); Where: i : index used by model-building functions. Should never be user declared. R : Reistance/Impedence of the series resistor in Ohms ein : Voltage/Potential of the ideal voltage source in Volts Note: The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.4 (wd.)resVoltage_output Resistive Voltage Source + voltage output An adaptor implementing a resitive voltage source within Wave Digital Filter connection trees. It should be used as a leaf/terminating element of the connection tree It is comprised of an ideal voltage source in series with a resistor Can be used for either DC (constant) or AC (signal) voltage sources. The resistive voltage source will also pass the voltage across it as an output of the model Usage vout(i) = resVoltage_output(i, R, ein); buildtree( A : vout ) : _; Where: i : index used by model-building functions. Should never be user declared. R : Reistance/Impedence of the series resistor in Ohms ein : Voltage/Potential across ideal voltage source in Volts Note: The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.4 (wd.)u_resVoltage Resistive Voltage Source (Unadapted) An unadapted adaptor implementing a resitive voltage source within Wave Digital Filter connection trees. It should be used as the root/top element of the connection tree It is comprised of an ideal voltage source in series with a resistor Can be used for either DC (constant) or AC (signal) voltage sources. Usage v1(i) = u_resVoltage(i, R, ein); buildtree( v1 : B ); Where: i : index used by model-building functions. Should never be user declared. R : Reistance/Impedence of the series resistor in Ohms ein : Voltage/Potential across ideal voltage source in Volts Note: Only usable as the root of a tree The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.4 (wd.)resCurrent Resistive Current Source An adaptor implementing a resitive current source within Wave Digital Filter connection trees. It should be used as a leaf/terminating element of the connection tree It is comprised of an ideal current source in parallel with a resistor Can be used for either DC (constant) or AC (signal) current sources. Usage i1(i) = resCurrent(i, R, jin); buildtree( A : i1 ); Where: i : index used by model-building functions. Should never be user declared. R : Reistance/Impedence of the parallel resistor in Ohms jin : Current through the ideal current source in Amps Note: The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.5 (wd.)u_resCurrent Resistive Current Source (Uadapted) An unadapted adaptor implementing a resitive current source within Wave Digital Filter connection trees. It should be used as the root/top element of the connection tree It is comprised of an ideal current source in parallel with a resistor Can be used for either DC (constant) or AC (signal) current sources. Usage i1(i) = u_resCurrent(i, R, jin); buildtree( i1 : B ); Where: i : index used by model-building functions. Should never be user declared. R : Reistance/Impedence of the series resistor in Ohms jin : Current through the ideal current source in Amps Note: Only usable as the root of a tree The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.5 (wd.)u_switch Ideal Switch (Unadapted) An unadapted adaptor implementing an ideal switch for Wave Digital Filter connection trees. It should be used as the root/top element of the connection tree Usage s1(i) = u_resCurrent(i, lambda); buildtree( s1 : B ); Where: i : index used by model-building functions. Should never be user declared. lambda : switch state control. -1 for closed switch, 1 for open switch. Note: Only usable as the root of a tree The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.8 Reactive One Port Adaptors (wd.)capacitor Capacitor A basic adaptor implementing a capacitor for use within Wave Digital Filter connection trees It should be used as a leaf/terminating element of the connection tree This capacitor model was digitized using the bi-linear transform Usage c1(i) = capacitor(i, R); buildtree( A : c1 ) : _; Where: i : index used by model-building functions. Should never be user declared. R : Capacitance/Impedence of the capacitor being modeled in Farads. Note: The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.3.1 (wd.)capacitor_output Capacitor + voltage out A basic adaptor implementing a capacitor for use within Wave Digital Filter connection trees It should be used as a leaf/terminating element of the connection tree The capacitor will also pass the voltage across itself as an output of the model This capacitor model was digitized using the bi-linear transform Usage cout(i) = capacitor_output(i, R); buildtree( A : cout ) : _; Where: i : index used by model-building functions. Should never be user declared. R : Capacitance/Impedence of the capacitor being modeled in Farads. Note: The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.3.1 (wd.)inductor Inductor A basic adaptor implementing an inductor for use within Wave Digital Filter connection trees It should be used as a leaf/terminating element of the connection tree This inductor model was digitized using the bi-linear transform Usage l1(i) = inductor(i, R); buildtree( A : l1 ); Where: i : index used by model-building functions. Should never be user declared. R : Inductance/Impedence of the inductor being modeled in Henries. Note: The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.3.2 (wd.)inductor_output Inductor + Voltage out A basic adaptor implementing an inductor for use within Wave Digital Filter connection trees It should be used as a leaf/terminating element of the connection tree The inductor will also pass the voltage across itself as an output of the model This inductor model was digitized using the bi-linear transform Usage lout(i) = inductor_output(i, R); buildtree( A : lout ) : _; Where: i : index used by model-building functions. Should never be user declared. R : Inductance/Impedence of the inductor being modeled in Henries. Note: The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.3.2 Nonlinear One Port Adaptors (wd.)u_idealDiode Ideal Diode (Unadapted) An unadapted adaptor implementing an ideal diode for Wave Digital Filter connection trees. It should be used as the root/top element of the connection tree Usage buildtree( u_idealDiode : B ); Note: Only usable as the root of a tree Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 3.2.3 (wd.)u_chua Chua Diode (Unadapted) An adaptor implementing the chua diode / non-linear resistor within Wave Digital Filter connection trees. It should be used as the root/top element of the connection tree Usage chua1(i) = u_chua(i, G1, G2, V0); buildtree( chua1 : B ) ; Where: i : index used by model-building functions. Should never be user declared. G1 : resistance parameter 1 of the chua diode G2 : resistance parameter 2 of the chua diode V0 : voltage parameter of the chua diode Note: Only usable as the root of a tree The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above. Reference Meerkotter and Scholz, \"Digital Simulation of Nonlinear Circuits by Wave Digital Filter Principles\" (wd.)lambert An implementation of the lambert function It uses Halley's method of iteration to aproximate the output Indluded in the wdf library for use in non-linear diode models adapted from K M Brigg's c++ lambert function approximator Usage lambert(n, itr) : _; Where: * n : value at which the lambert function will be evaluated * itr : number of iterations before output (wd.)u_diodePair A pair of diodes facing in opposite directions An unadapted adaptor implementing two antiparallel diodes for Wave Digital Filter connection trees. The behavior is approximated using Schottkey's ideal diode law Usage d1 = u_diodePair(i, Is, Vt); buildtree( d1 : B ); Where: i : index used by model-building functions. Should never be user declared. Is : saturation current of the diodes Vt : thermal resistances of the diodes Note: Only usable as the root of a tree Correct implementation is shown above. Reference K. Werner et al. \"An Improved and Generalized Diode Clipper Model for Wave Digital Filters\" (wd.)u_diodeSingle A single diode An unadapted adaptor implementing a single diode for Wave Digital Filter connection trees. The behavior is approximated using Schottkey's ideal diode law Usage d1 = u_diodeSingle(i, Is, Vt); buildtree( d1 : B ); Where: i : index used by model-building functions. Should never be user declared. Is : saturation current of the diodes Vt : thermal resistances of the diodes Note: Only usable as the root of a tree Correct implementation is shown above. Reference K. Werner et al. \"An Improved and Generalized Diode Clipper Model for Wave Digital Filters\" (wd.)u_diodeAntiparallel A set of antiparallel diodes with M diodes facing forwards and N diodes facing backwards An unadapted adaptor implementing antiparallel diodes for Wave Digital Filter connection trees. The behavior is approximated using Schottkey's ideal diode law Usage d1 = u_diodeAntiparallel(i, Is, Vt); buildtree( d1 : B ); Where: i : index used by model-building functions. Should never be user declared. Is : saturation current of the diodes Vt : thermal resistances of the diodes Note: Only usable as the root of a tree Correct implementation is shown above. Reference K. Werner et al. \"An Improved and Generalized Diode Clipper Model for Wave Digital Filters\" Two Port Adaptors (wd.)u_parallel_2 2-port parallel adaptor (Unadapted) An unadapted adaptor implementing a 2-port parallel connection between adaptors for Wave Digital Filter connection trees. Elements connected to this adaptor will behave as if connected in parallel in circuit Usage buildtree( u_parallel_2 : (A, B) ); Note: Only usable as the root of a tree This adaptor has no user-accessible parameters. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.4.1 (wd.)parallel_2 2-port parallel adaptor An adaptor implementing a 2-port parallel connection between adaptors for Wave Digital Filter connection trees. Elements connected to this adaptor will behave as if connected in parallel in circuit Usage buildtree( A : parallel_2 : B ); Note: This adaptor has no user-accessible parameters. It should be used within the connection tree with one previous and one forward adaptor Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.4.1 (wd.)u_series_2 2-port series adaptor (Unadapted) An unadapted adaptor implementing a 2-port series connection between adaptors for Wave Digital Filter connection trees. Elements connected to this adaptor will behave as if connected in series in circuit Usage buildtree( u_series_2 : (A, B) ); Note: Only usable as the root of a tree This adaptor has no user-accessible parameters. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.4.1 (wd.)series_2 2-port series adaptor An adaptor implementing a 2-port series connection between adaptors for Wave Digital Filter connection trees. Elements connected to this adaptor will behave as if connected in series in circuit Usage buildtree( A : series_2 : B ); Note: This adaptor has no user-accessible parameters. It should be used within the connection tree with one previous and one forward adaptor Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.4.1 (wd.)parallel_current 2-port parallel adaptor + ideal current source An adaptor implementing a 2-port series connection and internal idealized current source between adaptors for Wave Digital Filter connection trees. This adaptor connects the two connected elements and an additional ideal current source in parallel Usage i1 = parallel_current(i, jin); buildtree(A : i1 : B); Where: i : index used by model-building functions. Should never be user declared. jin : Current through the ideal current source in Amps Note: The adaptor must be declared as a seperate function before integration into the connection tree. It should be used within a connection tree with one previous and one forward adaptor Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.4.2 (wd.)series_voltage 2-port series adaptor + ideal voltage source An adaptor implementing a 2-port series connection and internal ideal voltage source between adaptors for Wave Digital Filter connection trees. This adaptor connects the two connected adaptors and an additional ideal voltage source in series Usage v1 = series_voltage(i, vin) buildtree( A : v1 : B ); Where: i : index used by model-building functions. Should never be user declared. vin : voltage across the ideal current source in Volts Note: The adaptor must be declared as a seperate function before integration into the connection tree. It should be used within the connection tree with one previous and one forward adaptor Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.4.2 Three Port Adaptors (wd.)parallel 3-port parallel adaptor An adaptor implementing a 3-port parallel connection between adaptors for Wave Digital Filter connection trees. This adaptor is used to connect adaptors simulating components connected in parallel in the circuit Usage buildtree( A : parallel : (B, C) ); Note: This adaptor has no user-accessible parameters. It should be used within the connection tree with one previous and two forward adaptors Reference K. Werner Dissertation, 1.5.1 (wd.)series 3-port series adaptor An adaptor implementing a 3-port series connection between adaptors for Wave Digital Filter connection trees. This adaptor is used to connect adaptors simulating components connected in series in the circuit Usage tree = A : (series : (B, C)); Note: This adaptor has no user-accessible parameters. It should be used within the connection tree with one previous and two forward adaptors Reference K. Werner Dissertation, 1.5.2 Model Building Functions (wd.)builddown function for building the strucutre for calculating waves travling down the WDF connection tree It recursively steps through the given tree, parametrizes the adaptors, and builds an algorithm It is used in conjunction with the buildup() function to create a full structure Usage builddown(A : B)~buildup(A : B); Where: * (A : B) : is a connection tree composed of WDF adaptors (wd.)buildup function for building the strucutre for calculating waves travling up the WDF connection tree It recursively steps through the given tree, parametrizes the adaptors, and builds an algorithm It is used in conjunction with the builddown() function to create a full structure Usage builddown(A : B)~buildup(A : B); Where: * (A : B) : is a connection tree composed of WDF adaptors (wd.)getres function for determining the upward-facing port resistance of a partial WDF connection tree It recursively steps through the given tree, parametrizes the adaptors, and builds and algorithm It is used by the buildup and builddown functions but is also helpful in testing Usage getres(A : B)~getres(A : B); Where: * (A : B) : is a partial connection tree composed of WDF adaptors Note: This function cannot be used on a complete WDF tree. When called on an unadapted adaptor (u_ prefix), it will create errors (wd.)parres function for determining the upward-facing port resistance of a partial WDF connection tree It recursively steps through the given tree, parametrizes the adaptors, and builds and algorithm It is used by the buildup and builddown functions but is also helpful in testing this function is a parallelized version of getres Usage parres((A , B))~parres((A , B)); Where: * (A , B) : is a partial connection tree composed of WDF adaptors Note: This function cannot be used on a complete WDF tree. When called on an unadapted adaptor (u_ prefix), it will create errors (wd.)buildout function for creating the output matrix for a WDF connection tree It recursively steps through the given tree and creates an output matrix passing only outputs Usage buildout( A : B ); Where: * (A : B) : is a connection tree composed of WDF adaptors (wd.)buildtree function for building the functioning DSP model from a WDF connection tree It recursively steps through the given tree, parametrizes the adaptors, and builds the algorithm Usage buildtree(A : B); Where: * (A : B) : a connection tree composed of WDF adaptors","title":" wavedigitalfilters "},{"location":"libs/wavedigitalfilters/#wavedigitalfilterslib","text":"A library of basic adaptors and methods to help construct Wave Digital Filter models in Faust. Its official prefix is wd .","title":"wavedigitalfilters.lib"},{"location":"libs/wavedigitalfilters/#algebraic-one-port-adaptors","text":"","title":"Algebraic One Port Adaptors"},{"location":"libs/wavedigitalfilters/#wdresistor","text":"Resistor A basic adaptor implementing a resistor for use within Wave Digital Filter connection trees It should be used as a leaf/terminating element of the connection tree","title":"(wd.)resistor"},{"location":"libs/wavedigitalfilters/#usage","text":"r1(i) = resistor(i, R); buildtree( A : r1 ); Where: i : index used by model-building functions. Should never be user declared. R : Resistance/Impedance of the resistor being modeled in Ohms. Note: The adaptor must be declared as a separate function before integration into the connection tree. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wavedigitalfilters/#reference","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.1","title":"Reference"},{"location":"libs/wavedigitalfilters/#wdresistor_output","text":"Resistor + voltage Out A basic adaptor implementing a resistor for use within Wave Digital Filter connection trees It should be used as a leaf/terminating element of the connection tree The resistor will also pass the voltage across itself as an output of the model","title":"(wd.)resistor_output"},{"location":"libs/wavedigitalfilters/#usage_1","text":"rout(i) = resistor_output(i, R); buildtree( A : rout ) : _; Where: i : index used by model-building functions. Should never be user declared. R : Resistance/Impedance of the resistor being modeled in Ohms. Note: The adaptor must be declared as a separate function before integration into the connection tree. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wavedigitalfilters/#reference_1","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.1","title":"Reference"},{"location":"libs/wavedigitalfilters/#wdresistor_output_current","text":"Resistor + current Out A basic adaptor implementing a resistor for use within Wave Digital Filter connection trees It should be used as a leaf/terminating element of the connection tree The resistor will also pass the current through itself as an output of the model","title":"(wd.)resistor_output_current"},{"location":"libs/wavedigitalfilters/#usage_2","text":"rout(i) = resistor_output_current(i, R); buildtree( A : rout ) : _; Where: i : index used by model-building functions. Should never be user declared. R : Resistance/Impedance of the resistor being modeled in Ohms. Note: The adaptor must be declared as a separate function before integration into the connection tree. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wavedigitalfilters/#reference_2","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.1","title":"Reference"},{"location":"libs/wavedigitalfilters/#wdu_voltage","text":"Ideal Voltage Source (Unadapted) An adaptor implementing an ideal voltage source within Wave Digital Filter connection trees. It should be used as the root/top element of the connection tree Can be used for either DC (constant) or AC (signal) voltage sources.","title":"(wd.)u_voltage"},{"location":"libs/wavedigitalfilters/#usage_3","text":"v1(i) = u_Voltage(i, ein); buildtree( v1 : B ); Where: i : index used by model-building functions. Should never be user declared. ein : Voltage/Potential across ideal voltage source in Volts Note: Only usable as the root of a tree The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wavedigitalfilters/#reference_3","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.2","title":"Reference"},{"location":"libs/wavedigitalfilters/#wdu_current","text":"Resistive Current Source (Unadapted) An unadapted adaptor implementing an ideal current source within Wave Digital Filter connection trees. It should be used as the root/top element of the connection tree Can be used for either DC (constant) or AC (signal) current sources.","title":"(wd.)u_current"},{"location":"libs/wavedigitalfilters/#usage_4","text":"i1(i) = u_current(i, jin); buildtree( i1 : B ); Where: i : index used by model-building functions. Should never be user declared. jin : Current through the ideal current source in Amps Note: Only usable as the root of a tree The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wavedigitalfilters/#reference_4","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.3","title":"Reference"},{"location":"libs/wavedigitalfilters/#wdresvoltage","text":"Resistive Voltage Source An adaptor implementing a resitive voltage source within Wave Digital Filter connection trees. It should be used as a leaf/terminating element of the connection tree It is comprised of an ideal voltage source in series with a resistor Can be used for either DC (constant) or AC (signal) voltage sources.","title":"(wd.)resVoltage"},{"location":"libs/wavedigitalfilters/#usage_5","text":"v1(i) = resVoltage(i, R, ein); buildtree( A : v1 ); Where: i : index used by model-building functions. Should never be user declared. R : Reistance/Impedence of the series resistor in Ohms ein : Voltage/Potential of the ideal voltage source in Volts Note: The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wavedigitalfilters/#reference_5","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.4","title":"Reference"},{"location":"libs/wavedigitalfilters/#wdresvoltage_output","text":"Resistive Voltage Source + voltage output An adaptor implementing a resitive voltage source within Wave Digital Filter connection trees. It should be used as a leaf/terminating element of the connection tree It is comprised of an ideal voltage source in series with a resistor Can be used for either DC (constant) or AC (signal) voltage sources. The resistive voltage source will also pass the voltage across it as an output of the model","title":"(wd.)resVoltage_output"},{"location":"libs/wavedigitalfilters/#usage_6","text":"vout(i) = resVoltage_output(i, R, ein); buildtree( A : vout ) : _; Where: i : index used by model-building functions. Should never be user declared. R : Reistance/Impedence of the series resistor in Ohms ein : Voltage/Potential across ideal voltage source in Volts Note: The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wavedigitalfilters/#reference_6","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.4","title":"Reference"},{"location":"libs/wavedigitalfilters/#wdu_resvoltage","text":"Resistive Voltage Source (Unadapted) An unadapted adaptor implementing a resitive voltage source within Wave Digital Filter connection trees. It should be used as the root/top element of the connection tree It is comprised of an ideal voltage source in series with a resistor Can be used for either DC (constant) or AC (signal) voltage sources.","title":"(wd.)u_resVoltage"},{"location":"libs/wavedigitalfilters/#usage_7","text":"v1(i) = u_resVoltage(i, R, ein); buildtree( v1 : B ); Where: i : index used by model-building functions. Should never be user declared. R : Reistance/Impedence of the series resistor in Ohms ein : Voltage/Potential across ideal voltage source in Volts Note: Only usable as the root of a tree The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wavedigitalfilters/#reference_7","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.4","title":"Reference"},{"location":"libs/wavedigitalfilters/#wdrescurrent","text":"Resistive Current Source An adaptor implementing a resitive current source within Wave Digital Filter connection trees. It should be used as a leaf/terminating element of the connection tree It is comprised of an ideal current source in parallel with a resistor Can be used for either DC (constant) or AC (signal) current sources.","title":"(wd.)resCurrent"},{"location":"libs/wavedigitalfilters/#usage_8","text":"i1(i) = resCurrent(i, R, jin); buildtree( A : i1 ); Where: i : index used by model-building functions. Should never be user declared. R : Reistance/Impedence of the parallel resistor in Ohms jin : Current through the ideal current source in Amps Note: The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wavedigitalfilters/#reference_8","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.5","title":"Reference"},{"location":"libs/wavedigitalfilters/#wdu_rescurrent","text":"Resistive Current Source (Uadapted) An unadapted adaptor implementing a resitive current source within Wave Digital Filter connection trees. It should be used as the root/top element of the connection tree It is comprised of an ideal current source in parallel with a resistor Can be used for either DC (constant) or AC (signal) current sources.","title":"(wd.)u_resCurrent"},{"location":"libs/wavedigitalfilters/#usage_9","text":"i1(i) = u_resCurrent(i, R, jin); buildtree( i1 : B ); Where: i : index used by model-building functions. Should never be user declared. R : Reistance/Impedence of the series resistor in Ohms jin : Current through the ideal current source in Amps Note: Only usable as the root of a tree The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wavedigitalfilters/#reference_9","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.5","title":"Reference"},{"location":"libs/wavedigitalfilters/#wdu_switch","text":"Ideal Switch (Unadapted) An unadapted adaptor implementing an ideal switch for Wave Digital Filter connection trees. It should be used as the root/top element of the connection tree","title":"(wd.)u_switch"},{"location":"libs/wavedigitalfilters/#usage_10","text":"s1(i) = u_resCurrent(i, lambda); buildtree( s1 : B ); Where: i : index used by model-building functions. Should never be user declared. lambda : switch state control. -1 for closed switch, 1 for open switch. Note: Only usable as the root of a tree The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wavedigitalfilters/#reference_10","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.8","title":"Reference"},{"location":"libs/wavedigitalfilters/#reactive-one-port-adaptors","text":"","title":"Reactive One Port Adaptors"},{"location":"libs/wavedigitalfilters/#wdcapacitor","text":"Capacitor A basic adaptor implementing a capacitor for use within Wave Digital Filter connection trees It should be used as a leaf/terminating element of the connection tree This capacitor model was digitized using the bi-linear transform","title":"(wd.)capacitor"},{"location":"libs/wavedigitalfilters/#usage_11","text":"c1(i) = capacitor(i, R); buildtree( A : c1 ) : _; Where: i : index used by model-building functions. Should never be user declared. R : Capacitance/Impedence of the capacitor being modeled in Farads. Note: The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wavedigitalfilters/#reference_11","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.3.1","title":"Reference"},{"location":"libs/wavedigitalfilters/#wdcapacitor_output","text":"Capacitor + voltage out A basic adaptor implementing a capacitor for use within Wave Digital Filter connection trees It should be used as a leaf/terminating element of the connection tree The capacitor will also pass the voltage across itself as an output of the model This capacitor model was digitized using the bi-linear transform","title":"(wd.)capacitor_output"},{"location":"libs/wavedigitalfilters/#usage_12","text":"cout(i) = capacitor_output(i, R); buildtree( A : cout ) : _; Where: i : index used by model-building functions. Should never be user declared. R : Capacitance/Impedence of the capacitor being modeled in Farads. Note: The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wavedigitalfilters/#reference_12","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.3.1","title":"Reference"},{"location":"libs/wavedigitalfilters/#wdinductor","text":"Inductor A basic adaptor implementing an inductor for use within Wave Digital Filter connection trees It should be used as a leaf/terminating element of the connection tree This inductor model was digitized using the bi-linear transform","title":"(wd.)inductor"},{"location":"libs/wavedigitalfilters/#usage_13","text":"l1(i) = inductor(i, R); buildtree( A : l1 ); Where: i : index used by model-building functions. Should never be user declared. R : Inductance/Impedence of the inductor being modeled in Henries. Note: The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wavedigitalfilters/#reference_13","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.3.2","title":"Reference"},{"location":"libs/wavedigitalfilters/#wdinductor_output","text":"Inductor + Voltage out A basic adaptor implementing an inductor for use within Wave Digital Filter connection trees It should be used as a leaf/terminating element of the connection tree The inductor will also pass the voltage across itself as an output of the model This inductor model was digitized using the bi-linear transform","title":"(wd.)inductor_output"},{"location":"libs/wavedigitalfilters/#usage_14","text":"lout(i) = inductor_output(i, R); buildtree( A : lout ) : _; Where: i : index used by model-building functions. Should never be user declared. R : Inductance/Impedence of the inductor being modeled in Henries. Note: The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wavedigitalfilters/#reference_14","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.3.2","title":"Reference"},{"location":"libs/wavedigitalfilters/#nonlinear-one-port-adaptors","text":"","title":"Nonlinear One Port Adaptors"},{"location":"libs/wavedigitalfilters/#wdu_idealdiode","text":"Ideal Diode (Unadapted) An unadapted adaptor implementing an ideal diode for Wave Digital Filter connection trees. It should be used as the root/top element of the connection tree","title":"(wd.)u_idealDiode"},{"location":"libs/wavedigitalfilters/#usage_15","text":"buildtree( u_idealDiode : B ); Note: Only usable as the root of a tree Correct implementation is shown above.","title":"Usage"},{"location":"libs/wavedigitalfilters/#reference_15","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 3.2.3","title":"Reference"},{"location":"libs/wavedigitalfilters/#wdu_chua","text":"Chua Diode (Unadapted) An adaptor implementing the chua diode / non-linear resistor within Wave Digital Filter connection trees. It should be used as the root/top element of the connection tree","title":"(wd.)u_chua"},{"location":"libs/wavedigitalfilters/#usage_16","text":"chua1(i) = u_chua(i, G1, G2, V0); buildtree( chua1 : B ) ; Where: i : index used by model-building functions. Should never be user declared. G1 : resistance parameter 1 of the chua diode G2 : resistance parameter 2 of the chua diode V0 : voltage parameter of the chua diode Note: Only usable as the root of a tree The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wavedigitalfilters/#reference_16","text":"Meerkotter and Scholz, \"Digital Simulation of Nonlinear Circuits by Wave Digital Filter Principles\"","title":"Reference"},{"location":"libs/wavedigitalfilters/#wdlambert","text":"An implementation of the lambert function It uses Halley's method of iteration to aproximate the output Indluded in the wdf library for use in non-linear diode models adapted from K M Brigg's c++ lambert function approximator","title":"(wd.)lambert"},{"location":"libs/wavedigitalfilters/#usage_17","text":"lambert(n, itr) : _; Where: * n : value at which the lambert function will be evaluated * itr : number of iterations before output","title":"Usage"},{"location":"libs/wavedigitalfilters/#wdu_diodepair","text":"A pair of diodes facing in opposite directions An unadapted adaptor implementing two antiparallel diodes for Wave Digital Filter connection trees. The behavior is approximated using Schottkey's ideal diode law","title":"(wd.)u_diodePair"},{"location":"libs/wavedigitalfilters/#usage_18","text":"d1 = u_diodePair(i, Is, Vt); buildtree( d1 : B ); Where: i : index used by model-building functions. Should never be user declared. Is : saturation current of the diodes Vt : thermal resistances of the diodes Note: Only usable as the root of a tree Correct implementation is shown above.","title":"Usage"},{"location":"libs/wavedigitalfilters/#reference_17","text":"K. Werner et al. \"An Improved and Generalized Diode Clipper Model for Wave Digital Filters\"","title":"Reference"},{"location":"libs/wavedigitalfilters/#wdu_diodesingle","text":"A single diode An unadapted adaptor implementing a single diode for Wave Digital Filter connection trees. The behavior is approximated using Schottkey's ideal diode law","title":"(wd.)u_diodeSingle"},{"location":"libs/wavedigitalfilters/#usage_19","text":"d1 = u_diodeSingle(i, Is, Vt); buildtree( d1 : B ); Where: i : index used by model-building functions. Should never be user declared. Is : saturation current of the diodes Vt : thermal resistances of the diodes Note: Only usable as the root of a tree Correct implementation is shown above.","title":"Usage"},{"location":"libs/wavedigitalfilters/#reference_18","text":"K. Werner et al. \"An Improved and Generalized Diode Clipper Model for Wave Digital Filters\"","title":"Reference"},{"location":"libs/wavedigitalfilters/#wdu_diodeantiparallel","text":"A set of antiparallel diodes with M diodes facing forwards and N diodes facing backwards An unadapted adaptor implementing antiparallel diodes for Wave Digital Filter connection trees. The behavior is approximated using Schottkey's ideal diode law","title":"(wd.)u_diodeAntiparallel"},{"location":"libs/wavedigitalfilters/#usage_20","text":"d1 = u_diodeAntiparallel(i, Is, Vt); buildtree( d1 : B ); Where: i : index used by model-building functions. Should never be user declared. Is : saturation current of the diodes Vt : thermal resistances of the diodes Note: Only usable as the root of a tree Correct implementation is shown above.","title":"Usage"},{"location":"libs/wavedigitalfilters/#reference_19","text":"K. Werner et al. \"An Improved and Generalized Diode Clipper Model for Wave Digital Filters\"","title":"Reference"},{"location":"libs/wavedigitalfilters/#two-port-adaptors","text":"","title":"Two Port Adaptors"},{"location":"libs/wavedigitalfilters/#wdu_parallel_2","text":"2-port parallel adaptor (Unadapted) An unadapted adaptor implementing a 2-port parallel connection between adaptors for Wave Digital Filter connection trees. Elements connected to this adaptor will behave as if connected in parallel in circuit","title":"(wd.)u_parallel_2"},{"location":"libs/wavedigitalfilters/#usage_21","text":"buildtree( u_parallel_2 : (A, B) ); Note: Only usable as the root of a tree This adaptor has no user-accessible parameters. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wavedigitalfilters/#reference_20","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.4.1","title":"Reference"},{"location":"libs/wavedigitalfilters/#wdparallel_2","text":"2-port parallel adaptor An adaptor implementing a 2-port parallel connection between adaptors for Wave Digital Filter connection trees. Elements connected to this adaptor will behave as if connected in parallel in circuit","title":"(wd.)parallel_2"},{"location":"libs/wavedigitalfilters/#usage_22","text":"buildtree( A : parallel_2 : B ); Note: This adaptor has no user-accessible parameters. It should be used within the connection tree with one previous and one forward adaptor Correct implementation is shown above.","title":"Usage"},{"location":"libs/wavedigitalfilters/#reference_21","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.4.1","title":"Reference"},{"location":"libs/wavedigitalfilters/#wdu_series_2","text":"2-port series adaptor (Unadapted) An unadapted adaptor implementing a 2-port series connection between adaptors for Wave Digital Filter connection trees. Elements connected to this adaptor will behave as if connected in series in circuit","title":"(wd.)u_series_2"},{"location":"libs/wavedigitalfilters/#usage_23","text":"buildtree( u_series_2 : (A, B) ); Note: Only usable as the root of a tree This adaptor has no user-accessible parameters. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wavedigitalfilters/#reference_22","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.4.1","title":"Reference"},{"location":"libs/wavedigitalfilters/#wdseries_2","text":"2-port series adaptor An adaptor implementing a 2-port series connection between adaptors for Wave Digital Filter connection trees. Elements connected to this adaptor will behave as if connected in series in circuit","title":"(wd.)series_2"},{"location":"libs/wavedigitalfilters/#usage_24","text":"buildtree( A : series_2 : B ); Note: This adaptor has no user-accessible parameters. It should be used within the connection tree with one previous and one forward adaptor Correct implementation is shown above.","title":"Usage"},{"location":"libs/wavedigitalfilters/#reference_23","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.4.1","title":"Reference"},{"location":"libs/wavedigitalfilters/#wdparallel_current","text":"2-port parallel adaptor + ideal current source An adaptor implementing a 2-port series connection and internal idealized current source between adaptors for Wave Digital Filter connection trees. This adaptor connects the two connected elements and an additional ideal current source in parallel","title":"(wd.)parallel_current"},{"location":"libs/wavedigitalfilters/#usage_25","text":"i1 = parallel_current(i, jin); buildtree(A : i1 : B); Where: i : index used by model-building functions. Should never be user declared. jin : Current through the ideal current source in Amps Note: The adaptor must be declared as a seperate function before integration into the connection tree. It should be used within a connection tree with one previous and one forward adaptor Correct implementation is shown above.","title":"Usage"},{"location":"libs/wavedigitalfilters/#reference_24","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.4.2","title":"Reference"},{"location":"libs/wavedigitalfilters/#wdseries_voltage","text":"2-port series adaptor + ideal voltage source An adaptor implementing a 2-port series connection and internal ideal voltage source between adaptors for Wave Digital Filter connection trees. This adaptor connects the two connected adaptors and an additional ideal voltage source in series","title":"(wd.)series_voltage"},{"location":"libs/wavedigitalfilters/#usage_26","text":"v1 = series_voltage(i, vin) buildtree( A : v1 : B ); Where: i : index used by model-building functions. Should never be user declared. vin : voltage across the ideal current source in Volts Note: The adaptor must be declared as a seperate function before integration into the connection tree. It should be used within the connection tree with one previous and one forward adaptor","title":"Usage"},{"location":"libs/wavedigitalfilters/#reference_25","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.4.2","title":"Reference"},{"location":"libs/wavedigitalfilters/#three-port-adaptors","text":"","title":"Three Port Adaptors"},{"location":"libs/wavedigitalfilters/#wdparallel","text":"3-port parallel adaptor An adaptor implementing a 3-port parallel connection between adaptors for Wave Digital Filter connection trees. This adaptor is used to connect adaptors simulating components connected in parallel in the circuit","title":"(wd.)parallel"},{"location":"libs/wavedigitalfilters/#usage_27","text":"buildtree( A : parallel : (B, C) ); Note: This adaptor has no user-accessible parameters. It should be used within the connection tree with one previous and two forward adaptors","title":"Usage"},{"location":"libs/wavedigitalfilters/#reference_26","text":"K. Werner Dissertation, 1.5.1","title":"Reference"},{"location":"libs/wavedigitalfilters/#wdseries","text":"3-port series adaptor An adaptor implementing a 3-port series connection between adaptors for Wave Digital Filter connection trees. This adaptor is used to connect adaptors simulating components connected in series in the circuit","title":"(wd.)series"},{"location":"libs/wavedigitalfilters/#usage_28","text":"tree = A : (series : (B, C)); Note: This adaptor has no user-accessible parameters. It should be used within the connection tree with one previous and two forward adaptors","title":"Usage"},{"location":"libs/wavedigitalfilters/#reference_27","text":"K. Werner Dissertation, 1.5.2","title":"Reference"},{"location":"libs/wavedigitalfilters/#model-building-functions","text":"","title":"Model Building Functions"},{"location":"libs/wavedigitalfilters/#wdbuilddown","text":"function for building the strucutre for calculating waves travling down the WDF connection tree It recursively steps through the given tree, parametrizes the adaptors, and builds an algorithm It is used in conjunction with the buildup() function to create a full structure","title":"(wd.)builddown"},{"location":"libs/wavedigitalfilters/#usage_29","text":"builddown(A : B)~buildup(A : B); Where: * (A : B) : is a connection tree composed of WDF adaptors","title":"Usage"},{"location":"libs/wavedigitalfilters/#wdbuildup","text":"function for building the strucutre for calculating waves travling up the WDF connection tree It recursively steps through the given tree, parametrizes the adaptors, and builds an algorithm It is used in conjunction with the builddown() function to create a full structure","title":"(wd.)buildup"},{"location":"libs/wavedigitalfilters/#usage_30","text":"builddown(A : B)~buildup(A : B); Where: * (A : B) : is a connection tree composed of WDF adaptors","title":"Usage"},{"location":"libs/wavedigitalfilters/#wdgetres","text":"function for determining the upward-facing port resistance of a partial WDF connection tree It recursively steps through the given tree, parametrizes the adaptors, and builds and algorithm It is used by the buildup and builddown functions but is also helpful in testing","title":"(wd.)getres"},{"location":"libs/wavedigitalfilters/#usage_31","text":"getres(A : B)~getres(A : B); Where: * (A : B) : is a partial connection tree composed of WDF adaptors Note: This function cannot be used on a complete WDF tree. When called on an unadapted adaptor (u_ prefix), it will create errors","title":"Usage"},{"location":"libs/wavedigitalfilters/#wdparres","text":"function for determining the upward-facing port resistance of a partial WDF connection tree It recursively steps through the given tree, parametrizes the adaptors, and builds and algorithm It is used by the buildup and builddown functions but is also helpful in testing this function is a parallelized version of getres","title":"(wd.)parres"},{"location":"libs/wavedigitalfilters/#usage_32","text":"parres((A , B))~parres((A , B)); Where: * (A , B) : is a partial connection tree composed of WDF adaptors Note: This function cannot be used on a complete WDF tree. When called on an unadapted adaptor (u_ prefix), it will create errors","title":"Usage"},{"location":"libs/wavedigitalfilters/#wdbuildout","text":"function for creating the output matrix for a WDF connection tree It recursively steps through the given tree and creates an output matrix passing only outputs","title":"(wd.)buildout"},{"location":"libs/wavedigitalfilters/#usage_33","text":"buildout( A : B ); Where: * (A : B) : is a connection tree composed of WDF adaptors","title":"Usage"},{"location":"libs/wavedigitalfilters/#wdbuildtree","text":"function for building the functioning DSP model from a WDF connection tree It recursively steps through the given tree, parametrizes the adaptors, and builds the algorithm","title":"(wd.)buildtree"},{"location":"libs/wavedigitalfilters/#usage_34","text":"buildtree(A : B); Where: * (A : B) : a connection tree composed of WDF adaptors","title":"Usage"},{"location":"libs/wdmodels/","text":"wdmodels.lib A library of basic adaptors and methods to help construct Wave Digital Filter models in Faust. Its official prefix is wd . Algebraic One Port Adaptors (wd.)resistor Resistor A basic adaptor implementing a resistor for use within Wave Digital Filter connection trees. It should be used as a leaf/terminating element of the connection tree. Usage r1(i) = resistor(i, R); buildtree( A : r1 ); Where: i : index used by model-building functions. Should never be user declared. R : Resistance/Impedance of the resistor being modeled in Ohms. Note: The adaptor must be declared as a separate function before integration into the connection tree. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.1 (wd.)resistor_output Resistor + voltage Out. A basic adaptor implementing a resistor for use within Wave Digital Filter connection trees. It should be used as a leaf/terminating element of the connection tree. The resistor will also pass the voltage across itself as an output of the model. Usage rout(i) = resistor_output(i, R); buildtree( A : rout ) : _; Where: i : index used by model-building functions. Should never be user declared. R : Resistance/Impedance of the resistor being modeled in Ohms. Note: The adaptor must be declared as a separate function before integration into the connection tree. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.1 (wd.)resistor_output_current Resistor + current Out. A basic adaptor implementing a resistor for use within Wave Digital Filter connection trees. It should be used as a leaf/terminating element of the connection tree. The resistor will also pass the current through itself as an output of the model. Usage rout(i) = resistor_output_current(i, R); buildtree( A : rout ) : _; Where: i : index used by model-building functions. Should never be user declared. R : Resistance/Impedance of the resistor being modeled in Ohms. Note: The adaptor must be declared as a separate function before integration into the connection tree. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.1 (wd.)u_voltage Ideal Voltage Source (Unadapted). An adaptor implementing an ideal voltage source within Wave Digital Filter connection trees. It should be used as the root/top element of the connection tree. Can be used for either DC (constant) or AC (signal) voltage sources. Usage v1(i) = u_Voltage(i, ein); buildtree( v1 : B ); Where: i : index used by model-building functions. Should never be user declared. ein : Voltage/Potential across ideal voltage source in Volts Note: Only usable as the root of a tree The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.2 (wd.)u_current Resistive Current Source (Unadapted). An unadapted adaptor implementing an ideal current source within Wave Digital Filter connection trees. It should be used as the root/top element of the connection tree. Can be used for either DC (constant) or AC (signal) current sources. Usage i1(i) = u_current(i, jin); buildtree( i1 : B ); Where: i : index used by model-building functions. Should never be user declared. jin : Current through the ideal current source in Amps Note: Only usable as the root of a tree. The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.3 (wd.)resVoltage Resistive Voltage Source. An adaptor implementing a resitive voltage source within Wave Digital Filter connection trees. It should be used as a leaf/terminating element of the connection tree. It is comprised of an ideal voltage source in series with a resistor. Can be used for either DC (constant) or AC (signal) voltage sources. Usage v1(i) = resVoltage(i, R, ein); buildtree( A : v1 ); Where: i : index used by model-building functions. Should never be user declared R : Resistance/Impedence of the series resistor in Ohms ein : Voltage/Potential of the ideal voltage source in Volts Note: The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.4 (wd.)resVoltage_output Resistive Voltage Source + voltage output. An adaptor implementing a resitive voltage source within Wave Digital Filter connection trees. It should be used as a leaf/terminating element of the connection tree. It is comprised of an ideal voltage source in series with a resistor. Can be used for either DC (constant) or AC (signal) voltage sources. The resistive voltage source will also pass the voltage across it as an output of the model. Usage vout(i) = resVoltage_output(i, R, ein); buildtree( A : vout ) : _; Where: i : index used by model-building functions. Should never be user declared R : Resistance/Impedence of the series resistor in Ohms ein : Voltage/Potential across ideal voltage source in Volts Note: The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.4 (wd.)u_resVoltage Resistive Voltage Source (Unadapted). An unadapted adaptor implementing a resitive voltage source within Wave Digital Filter connection trees. It should be used as the root/top element of the connection tree. It is comprised of an ideal voltage source in series with a resistor. Can be used for either DC (constant) or AC (signal) voltage sources. Usage v1(i) = u_resVoltage(i, R, ein); buildtree( v1 : B ); Where: i : index used by model-building functions. Should never be user declared R : Resistance/Impedence of the series resistor in Ohms ein : Voltage/Potential across ideal voltage source in Volts Note: Only usable as the root of a tree. The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.4 (wd.)resCurrent Resistive Current Source. An adaptor implementing a resitive current source within Wave Digital Filter connection trees. It should be used as a leaf/terminating element of the connection tree. It is comprised of an ideal current source in parallel with a resistor. Can be used for either DC (constant) or AC (signal) current sources. Usage i1(i) = resCurrent(i, R, jin); buildtree( A : i1 ); Where: i : index used by model-building functions. Should never be user declared. R : Resistance/Impedence of the parallel resistor in Ohms jin : Current through the ideal current source in Amps Note: The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.5 (wd.)u_resCurrent Resistive Current Source (Uadapted). An unadapted adaptor implementing a resitive current source within Wave Digital Filter connection trees. It should be used as the root/top element of the connection tree It is comprised of an ideal current source in parallel with a resistor Can be used for either DC (constant) or AC (signal) current sources. Usage i1(i) = u_resCurrent(i, R, jin); buildtree( i1 : B ); Where: i : index used by model-building functions. Should never be user declared. R : Resistance/Impedence of the series resistor in Ohms jin : Current through the ideal current source in Amps Note: Only usable as the root of a tree. The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.5 (wd.)u_switch Ideal Switch (Unadapted). An unadapted adaptor implementing an ideal switch for Wave Digital Filter connection trees. It should be used as the root/top element of the connection tree Usage s1(i) = u_resCurrent(i, lambda); buildtree( s1 : B ); Where: i : index used by model-building functions. Should never be user declared. lambda : switch state control. -1 for closed switch, 1 for open switch. Note: Only usable as the root of a tree The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.8 Reactive One Port Adaptors (wd.)capacitor Capacitor. A basic adaptor implementing a capacitor for use within Wave Digital Filter connection trees. It should be used as a leaf/terminating element of the connection tree. This capacitor model was digitized using the bi-linear transform. Usage c1(i) = capacitor(i, R); buildtree( A : c1 ) : _; Where: i : index used by model-building functions. Should never be user declared. R : Capacitance/Impedence of the capacitor being modeled in Farads. Note: The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.3.1 (wd.)capacitor_output Capacitor + voltage out. A basic adaptor implementing a capacitor for use within Wave Digital Filter connection trees. It should be used as a leaf/terminating element of the connection tree. The capacitor will also pass the voltage across itself as an output of the model. This capacitor model was digitized using the bi-linear transform. Usage cout(i) = capacitor_output(i, R); buildtree( A : cout ) : _; Where: i : index used by model-building functions. Should never be user declared R : Capacitance/Impedence of the capacitor being modeled in Farads Note: The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.3.1 (wd.)inductor Inductor. A basic adaptor implementing an inductor for use within Wave Digital Filter connection trees. It should be used as a leaf/terminating element of the connection tree. This inductor model was digitized using the bi-linear transform. Usage l1(i) = inductor(i, R); buildtree( A : l1 ); Where: i : index used by model-building functions. Should never be user declared R : Inductance/Impedence of the inductor being modeled in Henries Note: The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.3.2 (wd.)inductor_output Inductor + Voltage out. A basic adaptor implementing an inductor for use within Wave Digital Filter connection trees. It should be used as a leaf/terminating element of the connection tree. The inductor will also pass the voltage across itself as an output of the model. This inductor model was digitized using the bi-linear transform. Usage lout(i) = inductor_output(i, R); buildtree( A : lout ) : _; Where: i : index used by model-building functions. Should never be user declared R : Inductance/Impedence of the inductor being modeled in Henries Note: The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.3.2 Nonlinear One Port Adaptors (wd.)u_idealDiode Ideal Diode (Unadapted). An unadapted adaptor implementing an ideal diode for Wave Digital Filter connection trees. It should be used as the root/top element of the connection tree. Usage buildtree( u_idealDiode : B ); Note: Only usable as the root of a tree Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 3.2.3 (wd.)u_chua Chua Diode (Unadapted). An adaptor implementing the chua diode / non-linear resistor within Wave Digital Filter connection trees. It should be used as the root/top element of the connection tree. Usage chua1(i) = u_chua(i, G1, G2, V0); buildtree( chua1 : B ); Where: i : index used by model-building functions. Should never be user declared G1 : resistance parameter 1 of the chua diode G2 : resistance parameter 2 of the chua diode V0 : voltage parameter of the chua diode Note: Only usable as the root of a tree. The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above. Reference Meerkotter and Scholz, \"Digital Simulation of Nonlinear Circuits by Wave Digital Filter Principles\" (wd.)lambert An implementation of the lambert function. It uses Halley's method of iteration to aproximate the output. Included in the WD library for use in non-linear diode models. Adapted from K M Brigg's c++ lambert function approximator. Usage lambert(n, itr) : _; Where: * n : value at which the lambert function will be evaluated * itr : number of iterations before output (wd.)u_diodePair A pair of diodes facing in opposite directions. An unadapted adaptor implementing two antiparallel diodes for Wave Digital Filter connection trees. The behavior is approximated using Schottkey's ideal diode law. Usage d1 = u_diodePair(i, Is, Vt); buildtree( d1 : B ); Where: i : index used by model-building functions. Should never be user declared Is : saturation current of the diodes Vt : thermal resistances of the diodes Note: Only usable as the root of a tree. Correct implementation is shown above. Reference K. Werner et al. \"An Improved and Generalized Diode Clipper Model for Wave Digital Filters\" (wd.)u_diodeSingle A single diode. An unadapted adaptor implementing a single diode for Wave Digital Filter connection trees. The behavior is approximated using Schottkey's ideal diode law. Usage d1 = u_diodeSingle(i, Is, Vt); buildtree( d1 : B ); Where: i : index used by model-building functions. Should never be user declared Is : saturation current of the diodes Vt : thermal resistances of the diodes Note: Only usable as the root of a tree Correct implementation is shown above. Reference K. Werner et al. \"An Improved and Generalized Diode Clipper Model for Wave Digital Filters\" (wd.)u_diodeAntiparallel A set of antiparallel diodes with M diodes facing forwards and N diodes facing backwards. An unadapted adaptor implementing antiparallel diodes for Wave Digital Filter connection trees. The behavior is approximated using Schottkey's ideal diode law. Usage d1 = u_diodeAntiparallel(i, Is, Vt); buildtree( d1 : B ); Where: i : index used by model-building functions. Should never be user declared Is : saturation current of the diodes Vt : thermal resistances of the diodes Note: Only usable as the root of a tree Correct implementation is shown above. Reference K. Werner et al. \"An Improved and Generalized Diode Clipper Model for Wave Digital Filters\" Two Port Adaptors (wd.)u_parallel_2 2-port parallel adaptor (Unadapted). An unadapted adaptor implementing a 2-port parallel connection between adaptors for Wave Digital Filter connection trees. Elements connected to this adaptor will behave as if connected in parallel in circuit. Usage buildtree( u_parallel_2 : (A, B) ); Note: Only usable as the root of a tree. This adaptor has no user-accessible parameters. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.4.1 (wd.)parallel_2 2-port parallel adaptor. An adaptor implementing a 2-port parallel connection between adaptors for Wave Digital Filter connection trees. Elements connected to this adaptor will behave as if connected in parallel in circuit. Usage buildtree( A : parallel_2 : B ); Note: This adaptor has no user-accessible parameters. It should be used within the connection tree with one previous and one forward adaptor. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.4.1 (wd.)u_series_2 2-port series adaptor (Unadapted). An unadapted adaptor implementing a 2-port series connection between adaptors for Wave Digital Filter connection trees. Elements connected to this adaptor will behave as if connected in series in circuit. Usage buildtree( u_series_2 : (A, B) ); Note: Only usable as the root of a tree. This adaptor has no user-accessible parameters. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.4.1 (wd.)series_2 2-port series adaptor. An adaptor implementing a 2-port series connection between adaptors for Wave Digital Filter connection trees. Elements connected to this adaptor will behave as if connected in series in circuit. Usage buildtree( A : series_2 : B ); Note: This adaptor has no user-accessible parameters. It should be used within the connection tree with one previous and one forward adaptor. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.4.1 (wd.)parallel_current 2-port parallel adaptor + ideal current source. An adaptor implementing a 2-port series connection and internal idealized current source between adaptors for Wave Digital Filter connection trees. This adaptor connects the two connected elements and an additional ideal current source in parallel. Usage i1 = parallel_current(i, jin); buildtree(A : i1 : B); Where: i : index used by model-building functions. Should never be user declared jin : Current through the ideal current source in Amps Note: The adaptor must be declared as a seperate function before integration into the connection tree. It should be used within a connection tree with one previous and one forward adaptor. Correct implementation is shown above. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.4.2 (wd.)series_voltage 2-port series adaptor + ideal voltage source. An adaptor implementing a 2-port series connection and internal ideal voltage source between adaptors for Wave Digital Filter connection trees. This adaptor connects the two connected adaptors and an additional ideal voltage source in series. Usage v1 = series_voltage(i, vin) buildtree( A : v1 : B ); Where: i : index used by model-building functions. Should never be user declared vin : voltage across the ideal current source in Volts Note: The adaptor must be declared as a seperate function before integration into the connection tree. It should be used within the connection tree with one previous and one forward adaptor. Reference K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.4.2 Three Port Adaptors (wd.)parallel 3-port parallel adaptor. An adaptor implementing a 3-port parallel connection between adaptors for Wave Digital Filter connection trees. This adaptor is used to connect adaptors simulating components connected in parallel in the circuit. Usage buildtree( A : parallel : (B, C) ); Note: This adaptor has no user-accessible parameters. It should be used within the connection tree with one previous and two forward adaptors. Reference K. Werner Dissertation, 1.5.1 (wd.)series 3-port series adaptor. An adaptor implementing a 3-port series connection between adaptors for Wave Digital Filter connection trees. This adaptor is used to connect adaptors simulating components connected in series in the circuit. Usage tree = A : (series : (B, C)); Note: This adaptor has no user-accessible parameters. It should be used within the connection tree with one previous and two forward adaptors. Reference K. Werner Dissertation, 1.5.2 Model Building Functions (wd.)builddown Function for building the strucutre for calculating waves travling down the WD connection tree. It recursively steps through the given tree, parametrizes the adaptors, and builds an algorithm. It is used in conjunction with the buildup() function to create a full structure. Usage builddown(A : B)~buildup(A : B); Where: * (A : B) : is a connection tree composed of WD adaptors (wd.)buildup Function for building the strucutre for calculating waves travling up the WD connection tree. It recursively steps through the given tree, parametrizes the adaptors, and builds an algorithm. It is used in conjunction with the builddown() function to create a full structure. Usage builddown(A : B)~buildup(A : B); Where: * (A : B) : is a connection tree composed of WD adaptors (wd.)getres Function for determining the upward-facing port resistance of a partial WD connection tree. It recursively steps through the given tree, parametrizes the adaptors, and builds and algorithm. It is used by the buildup and builddown functions but is also helpful in testing. Usage getres(A : B)~getres(A : B); Where: * (A : B) : is a partial connection tree composed of WD adaptors Note: This function cannot be used on a complete WD tree. When called on an unadapted adaptor (u_ prefix), it will create errors (wd.)parres Function for determining the upward-facing port resistance of a partial WD connection tree. It recursively steps through the given tree, parametrizes the adaptors, and builds and algorithm. It is used by the buildup and builddown functions but is also helpful in testing. This function is a parallelized version of getres. Usage parres((A , B))~parres((A , B)); Where: * (A , B) : is a partial connection tree composed of WD adaptors Note: This function cannot be used on a complete WD tree. When called on an unadapted adaptor (u_ prefix), it will create errors (wd.)buildout Function for creating the output matrix for a WD connection tree. It recursively steps through the given tree and creates an output matrix passing only outputs. Usage buildout( A : B ); Where: * (A : B) : is a connection tree composed of WD adaptors (wd.)buildtree Function for building the functioning DSP model from a WD connection tree. It recursively steps through the given tree, parametrizes the adaptors, and builds the algorithm. Usage buildtree(A : B); Where: * (A : B) : a connection tree composed of WD adaptors","title":"wdmodels.lib"},{"location":"libs/wdmodels/#wdmodelslib","text":"A library of basic adaptors and methods to help construct Wave Digital Filter models in Faust. Its official prefix is wd .","title":"wdmodels.lib"},{"location":"libs/wdmodels/#algebraic-one-port-adaptors","text":"","title":"Algebraic One Port Adaptors"},{"location":"libs/wdmodels/#wdresistor","text":"Resistor A basic adaptor implementing a resistor for use within Wave Digital Filter connection trees. It should be used as a leaf/terminating element of the connection tree.","title":"(wd.)resistor"},{"location":"libs/wdmodels/#usage","text":"r1(i) = resistor(i, R); buildtree( A : r1 ); Where: i : index used by model-building functions. Should never be user declared. R : Resistance/Impedance of the resistor being modeled in Ohms. Note: The adaptor must be declared as a separate function before integration into the connection tree. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wdmodels/#reference","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.1","title":"Reference"},{"location":"libs/wdmodels/#wdresistor_output","text":"Resistor + voltage Out. A basic adaptor implementing a resistor for use within Wave Digital Filter connection trees. It should be used as a leaf/terminating element of the connection tree. The resistor will also pass the voltage across itself as an output of the model.","title":"(wd.)resistor_output"},{"location":"libs/wdmodels/#usage_1","text":"rout(i) = resistor_output(i, R); buildtree( A : rout ) : _; Where: i : index used by model-building functions. Should never be user declared. R : Resistance/Impedance of the resistor being modeled in Ohms. Note: The adaptor must be declared as a separate function before integration into the connection tree. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wdmodels/#reference_1","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.1","title":"Reference"},{"location":"libs/wdmodels/#wdresistor_output_current","text":"Resistor + current Out. A basic adaptor implementing a resistor for use within Wave Digital Filter connection trees. It should be used as a leaf/terminating element of the connection tree. The resistor will also pass the current through itself as an output of the model.","title":"(wd.)resistor_output_current"},{"location":"libs/wdmodels/#usage_2","text":"rout(i) = resistor_output_current(i, R); buildtree( A : rout ) : _; Where: i : index used by model-building functions. Should never be user declared. R : Resistance/Impedance of the resistor being modeled in Ohms. Note: The adaptor must be declared as a separate function before integration into the connection tree. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wdmodels/#reference_2","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.1","title":"Reference"},{"location":"libs/wdmodels/#wdu_voltage","text":"Ideal Voltage Source (Unadapted). An adaptor implementing an ideal voltage source within Wave Digital Filter connection trees. It should be used as the root/top element of the connection tree. Can be used for either DC (constant) or AC (signal) voltage sources.","title":"(wd.)u_voltage"},{"location":"libs/wdmodels/#usage_3","text":"v1(i) = u_Voltage(i, ein); buildtree( v1 : B ); Where: i : index used by model-building functions. Should never be user declared. ein : Voltage/Potential across ideal voltage source in Volts Note: Only usable as the root of a tree The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wdmodels/#reference_3","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.2","title":"Reference"},{"location":"libs/wdmodels/#wdu_current","text":"Resistive Current Source (Unadapted). An unadapted adaptor implementing an ideal current source within Wave Digital Filter connection trees. It should be used as the root/top element of the connection tree. Can be used for either DC (constant) or AC (signal) current sources.","title":"(wd.)u_current"},{"location":"libs/wdmodels/#usage_4","text":"i1(i) = u_current(i, jin); buildtree( i1 : B ); Where: i : index used by model-building functions. Should never be user declared. jin : Current through the ideal current source in Amps Note: Only usable as the root of a tree. The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wdmodels/#reference_4","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.3","title":"Reference"},{"location":"libs/wdmodels/#wdresvoltage","text":"Resistive Voltage Source. An adaptor implementing a resitive voltage source within Wave Digital Filter connection trees. It should be used as a leaf/terminating element of the connection tree. It is comprised of an ideal voltage source in series with a resistor. Can be used for either DC (constant) or AC (signal) voltage sources.","title":"(wd.)resVoltage"},{"location":"libs/wdmodels/#usage_5","text":"v1(i) = resVoltage(i, R, ein); buildtree( A : v1 ); Where: i : index used by model-building functions. Should never be user declared R : Resistance/Impedence of the series resistor in Ohms ein : Voltage/Potential of the ideal voltage source in Volts Note: The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wdmodels/#reference_5","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.4","title":"Reference"},{"location":"libs/wdmodels/#wdresvoltage_output","text":"Resistive Voltage Source + voltage output. An adaptor implementing a resitive voltage source within Wave Digital Filter connection trees. It should be used as a leaf/terminating element of the connection tree. It is comprised of an ideal voltage source in series with a resistor. Can be used for either DC (constant) or AC (signal) voltage sources. The resistive voltage source will also pass the voltage across it as an output of the model.","title":"(wd.)resVoltage_output"},{"location":"libs/wdmodels/#usage_6","text":"vout(i) = resVoltage_output(i, R, ein); buildtree( A : vout ) : _; Where: i : index used by model-building functions. Should never be user declared R : Resistance/Impedence of the series resistor in Ohms ein : Voltage/Potential across ideal voltage source in Volts Note: The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wdmodels/#reference_6","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.4","title":"Reference"},{"location":"libs/wdmodels/#wdu_resvoltage","text":"Resistive Voltage Source (Unadapted). An unadapted adaptor implementing a resitive voltage source within Wave Digital Filter connection trees. It should be used as the root/top element of the connection tree. It is comprised of an ideal voltage source in series with a resistor. Can be used for either DC (constant) or AC (signal) voltage sources.","title":"(wd.)u_resVoltage"},{"location":"libs/wdmodels/#usage_7","text":"v1(i) = u_resVoltage(i, R, ein); buildtree( v1 : B ); Where: i : index used by model-building functions. Should never be user declared R : Resistance/Impedence of the series resistor in Ohms ein : Voltage/Potential across ideal voltage source in Volts Note: Only usable as the root of a tree. The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wdmodels/#reference_7","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.4","title":"Reference"},{"location":"libs/wdmodels/#wdrescurrent","text":"Resistive Current Source. An adaptor implementing a resitive current source within Wave Digital Filter connection trees. It should be used as a leaf/terminating element of the connection tree. It is comprised of an ideal current source in parallel with a resistor. Can be used for either DC (constant) or AC (signal) current sources.","title":"(wd.)resCurrent"},{"location":"libs/wdmodels/#usage_8","text":"i1(i) = resCurrent(i, R, jin); buildtree( A : i1 ); Where: i : index used by model-building functions. Should never be user declared. R : Resistance/Impedence of the parallel resistor in Ohms jin : Current through the ideal current source in Amps Note: The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wdmodels/#reference_8","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.5","title":"Reference"},{"location":"libs/wdmodels/#wdu_rescurrent","text":"Resistive Current Source (Uadapted). An unadapted adaptor implementing a resitive current source within Wave Digital Filter connection trees. It should be used as the root/top element of the connection tree It is comprised of an ideal current source in parallel with a resistor Can be used for either DC (constant) or AC (signal) current sources.","title":"(wd.)u_resCurrent"},{"location":"libs/wdmodels/#usage_9","text":"i1(i) = u_resCurrent(i, R, jin); buildtree( i1 : B ); Where: i : index used by model-building functions. Should never be user declared. R : Resistance/Impedence of the series resistor in Ohms jin : Current through the ideal current source in Amps Note: Only usable as the root of a tree. The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wdmodels/#reference_9","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.5","title":"Reference"},{"location":"libs/wdmodels/#wdu_switch","text":"Ideal Switch (Unadapted). An unadapted adaptor implementing an ideal switch for Wave Digital Filter connection trees. It should be used as the root/top element of the connection tree","title":"(wd.)u_switch"},{"location":"libs/wdmodels/#usage_10","text":"s1(i) = u_resCurrent(i, lambda); buildtree( s1 : B ); Where: i : index used by model-building functions. Should never be user declared. lambda : switch state control. -1 for closed switch, 1 for open switch. Note: Only usable as the root of a tree The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wdmodels/#reference_10","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.2.8","title":"Reference"},{"location":"libs/wdmodels/#reactive-one-port-adaptors","text":"","title":"Reactive One Port Adaptors"},{"location":"libs/wdmodels/#wdcapacitor","text":"Capacitor. A basic adaptor implementing a capacitor for use within Wave Digital Filter connection trees. It should be used as a leaf/terminating element of the connection tree. This capacitor model was digitized using the bi-linear transform.","title":"(wd.)capacitor"},{"location":"libs/wdmodels/#usage_11","text":"c1(i) = capacitor(i, R); buildtree( A : c1 ) : _; Where: i : index used by model-building functions. Should never be user declared. R : Capacitance/Impedence of the capacitor being modeled in Farads. Note: The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wdmodels/#reference_11","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.3.1","title":"Reference"},{"location":"libs/wdmodels/#wdcapacitor_output","text":"Capacitor + voltage out. A basic adaptor implementing a capacitor for use within Wave Digital Filter connection trees. It should be used as a leaf/terminating element of the connection tree. The capacitor will also pass the voltage across itself as an output of the model. This capacitor model was digitized using the bi-linear transform.","title":"(wd.)capacitor_output"},{"location":"libs/wdmodels/#usage_12","text":"cout(i) = capacitor_output(i, R); buildtree( A : cout ) : _; Where: i : index used by model-building functions. Should never be user declared R : Capacitance/Impedence of the capacitor being modeled in Farads Note: The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wdmodels/#reference_12","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.3.1","title":"Reference"},{"location":"libs/wdmodels/#wdinductor","text":"Inductor. A basic adaptor implementing an inductor for use within Wave Digital Filter connection trees. It should be used as a leaf/terminating element of the connection tree. This inductor model was digitized using the bi-linear transform.","title":"(wd.)inductor"},{"location":"libs/wdmodels/#usage_13","text":"l1(i) = inductor(i, R); buildtree( A : l1 ); Where: i : index used by model-building functions. Should never be user declared R : Inductance/Impedence of the inductor being modeled in Henries Note: The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wdmodels/#reference_13","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.3.2","title":"Reference"},{"location":"libs/wdmodels/#wdinductor_output","text":"Inductor + Voltage out. A basic adaptor implementing an inductor for use within Wave Digital Filter connection trees. It should be used as a leaf/terminating element of the connection tree. The inductor will also pass the voltage across itself as an output of the model. This inductor model was digitized using the bi-linear transform.","title":"(wd.)inductor_output"},{"location":"libs/wdmodels/#usage_14","text":"lout(i) = inductor_output(i, R); buildtree( A : lout ) : _; Where: i : index used by model-building functions. Should never be user declared R : Inductance/Impedence of the inductor being modeled in Henries Note: The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wdmodels/#reference_14","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.3.2","title":"Reference"},{"location":"libs/wdmodels/#nonlinear-one-port-adaptors","text":"","title":"Nonlinear One Port Adaptors"},{"location":"libs/wdmodels/#wdu_idealdiode","text":"Ideal Diode (Unadapted). An unadapted adaptor implementing an ideal diode for Wave Digital Filter connection trees. It should be used as the root/top element of the connection tree.","title":"(wd.)u_idealDiode"},{"location":"libs/wdmodels/#usage_15","text":"buildtree( u_idealDiode : B ); Note: Only usable as the root of a tree Correct implementation is shown above.","title":"Usage"},{"location":"libs/wdmodels/#reference_15","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 3.2.3","title":"Reference"},{"location":"libs/wdmodels/#wdu_chua","text":"Chua Diode (Unadapted). An adaptor implementing the chua diode / non-linear resistor within Wave Digital Filter connection trees. It should be used as the root/top element of the connection tree.","title":"(wd.)u_chua"},{"location":"libs/wdmodels/#usage_16","text":"chua1(i) = u_chua(i, G1, G2, V0); buildtree( chua1 : B ); Where: i : index used by model-building functions. Should never be user declared G1 : resistance parameter 1 of the chua diode G2 : resistance parameter 2 of the chua diode V0 : voltage parameter of the chua diode Note: Only usable as the root of a tree. The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wdmodels/#reference_16","text":"Meerkotter and Scholz, \"Digital Simulation of Nonlinear Circuits by Wave Digital Filter Principles\"","title":"Reference"},{"location":"libs/wdmodels/#wdlambert","text":"An implementation of the lambert function. It uses Halley's method of iteration to aproximate the output. Included in the WD library for use in non-linear diode models. Adapted from K M Brigg's c++ lambert function approximator.","title":"(wd.)lambert"},{"location":"libs/wdmodels/#usage_17","text":"lambert(n, itr) : _; Where: * n : value at which the lambert function will be evaluated * itr : number of iterations before output","title":"Usage"},{"location":"libs/wdmodels/#wdu_diodepair","text":"A pair of diodes facing in opposite directions. An unadapted adaptor implementing two antiparallel diodes for Wave Digital Filter connection trees. The behavior is approximated using Schottkey's ideal diode law.","title":"(wd.)u_diodePair"},{"location":"libs/wdmodels/#usage_18","text":"d1 = u_diodePair(i, Is, Vt); buildtree( d1 : B ); Where: i : index used by model-building functions. Should never be user declared Is : saturation current of the diodes Vt : thermal resistances of the diodes Note: Only usable as the root of a tree. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wdmodels/#reference_17","text":"K. Werner et al. \"An Improved and Generalized Diode Clipper Model for Wave Digital Filters\"","title":"Reference"},{"location":"libs/wdmodels/#wdu_diodesingle","text":"A single diode. An unadapted adaptor implementing a single diode for Wave Digital Filter connection trees. The behavior is approximated using Schottkey's ideal diode law.","title":"(wd.)u_diodeSingle"},{"location":"libs/wdmodels/#usage_19","text":"d1 = u_diodeSingle(i, Is, Vt); buildtree( d1 : B ); Where: i : index used by model-building functions. Should never be user declared Is : saturation current of the diodes Vt : thermal resistances of the diodes Note: Only usable as the root of a tree Correct implementation is shown above.","title":"Usage"},{"location":"libs/wdmodels/#reference_18","text":"K. Werner et al. \"An Improved and Generalized Diode Clipper Model for Wave Digital Filters\"","title":"Reference"},{"location":"libs/wdmodels/#wdu_diodeantiparallel","text":"A set of antiparallel diodes with M diodes facing forwards and N diodes facing backwards. An unadapted adaptor implementing antiparallel diodes for Wave Digital Filter connection trees. The behavior is approximated using Schottkey's ideal diode law.","title":"(wd.)u_diodeAntiparallel"},{"location":"libs/wdmodels/#usage_20","text":"d1 = u_diodeAntiparallel(i, Is, Vt); buildtree( d1 : B ); Where: i : index used by model-building functions. Should never be user declared Is : saturation current of the diodes Vt : thermal resistances of the diodes Note: Only usable as the root of a tree Correct implementation is shown above.","title":"Usage"},{"location":"libs/wdmodels/#reference_19","text":"K. Werner et al. \"An Improved and Generalized Diode Clipper Model for Wave Digital Filters\"","title":"Reference"},{"location":"libs/wdmodels/#two-port-adaptors","text":"","title":"Two Port Adaptors"},{"location":"libs/wdmodels/#wdu_parallel_2","text":"2-port parallel adaptor (Unadapted). An unadapted adaptor implementing a 2-port parallel connection between adaptors for Wave Digital Filter connection trees. Elements connected to this adaptor will behave as if connected in parallel in circuit.","title":"(wd.)u_parallel_2"},{"location":"libs/wdmodels/#usage_21","text":"buildtree( u_parallel_2 : (A, B) ); Note: Only usable as the root of a tree. This adaptor has no user-accessible parameters. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wdmodels/#reference_20","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.4.1","title":"Reference"},{"location":"libs/wdmodels/#wdparallel_2","text":"2-port parallel adaptor. An adaptor implementing a 2-port parallel connection between adaptors for Wave Digital Filter connection trees. Elements connected to this adaptor will behave as if connected in parallel in circuit.","title":"(wd.)parallel_2"},{"location":"libs/wdmodels/#usage_22","text":"buildtree( A : parallel_2 : B ); Note: This adaptor has no user-accessible parameters. It should be used within the connection tree with one previous and one forward adaptor. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wdmodels/#reference_21","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.4.1","title":"Reference"},{"location":"libs/wdmodels/#wdu_series_2","text":"2-port series adaptor (Unadapted). An unadapted adaptor implementing a 2-port series connection between adaptors for Wave Digital Filter connection trees. Elements connected to this adaptor will behave as if connected in series in circuit.","title":"(wd.)u_series_2"},{"location":"libs/wdmodels/#usage_23","text":"buildtree( u_series_2 : (A, B) ); Note: Only usable as the root of a tree. This adaptor has no user-accessible parameters. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wdmodels/#reference_22","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.4.1","title":"Reference"},{"location":"libs/wdmodels/#wdseries_2","text":"2-port series adaptor. An adaptor implementing a 2-port series connection between adaptors for Wave Digital Filter connection trees. Elements connected to this adaptor will behave as if connected in series in circuit.","title":"(wd.)series_2"},{"location":"libs/wdmodels/#usage_24","text":"buildtree( A : series_2 : B ); Note: This adaptor has no user-accessible parameters. It should be used within the connection tree with one previous and one forward adaptor. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wdmodels/#reference_23","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.4.1","title":"Reference"},{"location":"libs/wdmodels/#wdparallel_current","text":"2-port parallel adaptor + ideal current source. An adaptor implementing a 2-port series connection and internal idealized current source between adaptors for Wave Digital Filter connection trees. This adaptor connects the two connected elements and an additional ideal current source in parallel.","title":"(wd.)parallel_current"},{"location":"libs/wdmodels/#usage_25","text":"i1 = parallel_current(i, jin); buildtree(A : i1 : B); Where: i : index used by model-building functions. Should never be user declared jin : Current through the ideal current source in Amps Note: The adaptor must be declared as a seperate function before integration into the connection tree. It should be used within a connection tree with one previous and one forward adaptor. Correct implementation is shown above.","title":"Usage"},{"location":"libs/wdmodels/#reference_24","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.4.2","title":"Reference"},{"location":"libs/wdmodels/#wdseries_voltage","text":"2-port series adaptor + ideal voltage source. An adaptor implementing a 2-port series connection and internal ideal voltage source between adaptors for Wave Digital Filter connection trees. This adaptor connects the two connected adaptors and an additional ideal voltage source in series.","title":"(wd.)series_voltage"},{"location":"libs/wdmodels/#usage_26","text":"v1 = series_voltage(i, vin) buildtree( A : v1 : B ); Where: i : index used by model-building functions. Should never be user declared vin : voltage across the ideal current source in Volts Note: The adaptor must be declared as a seperate function before integration into the connection tree. It should be used within the connection tree with one previous and one forward adaptor.","title":"Usage"},{"location":"libs/wdmodels/#reference_25","text":"K. Werner, \"Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters\", 1.4.2","title":"Reference"},{"location":"libs/wdmodels/#three-port-adaptors","text":"","title":"Three Port Adaptors"},{"location":"libs/wdmodels/#wdparallel","text":"3-port parallel adaptor. An adaptor implementing a 3-port parallel connection between adaptors for Wave Digital Filter connection trees. This adaptor is used to connect adaptors simulating components connected in parallel in the circuit.","title":"(wd.)parallel"},{"location":"libs/wdmodels/#usage_27","text":"buildtree( A : parallel : (B, C) ); Note: This adaptor has no user-accessible parameters. It should be used within the connection tree with one previous and two forward adaptors.","title":"Usage"},{"location":"libs/wdmodels/#reference_26","text":"K. Werner Dissertation, 1.5.1","title":"Reference"},{"location":"libs/wdmodels/#wdseries","text":"3-port series adaptor. An adaptor implementing a 3-port series connection between adaptors for Wave Digital Filter connection trees. This adaptor is used to connect adaptors simulating components connected in series in the circuit.","title":"(wd.)series"},{"location":"libs/wdmodels/#usage_28","text":"tree = A : (series : (B, C)); Note: This adaptor has no user-accessible parameters. It should be used within the connection tree with one previous and two forward adaptors.","title":"Usage"},{"location":"libs/wdmodels/#reference_27","text":"K. Werner Dissertation, 1.5.2","title":"Reference"},{"location":"libs/wdmodels/#model-building-functions","text":"","title":"Model Building Functions"},{"location":"libs/wdmodels/#wdbuilddown","text":"Function for building the strucutre for calculating waves travling down the WD connection tree. It recursively steps through the given tree, parametrizes the adaptors, and builds an algorithm. It is used in conjunction with the buildup() function to create a full structure.","title":"(wd.)builddown"},{"location":"libs/wdmodels/#usage_29","text":"builddown(A : B)~buildup(A : B); Where: * (A : B) : is a connection tree composed of WD adaptors","title":"Usage"},{"location":"libs/wdmodels/#wdbuildup","text":"Function for building the strucutre for calculating waves travling up the WD connection tree. It recursively steps through the given tree, parametrizes the adaptors, and builds an algorithm. It is used in conjunction with the builddown() function to create a full structure.","title":"(wd.)buildup"},{"location":"libs/wdmodels/#usage_30","text":"builddown(A : B)~buildup(A : B); Where: * (A : B) : is a connection tree composed of WD adaptors","title":"Usage"},{"location":"libs/wdmodels/#wdgetres","text":"Function for determining the upward-facing port resistance of a partial WD connection tree. It recursively steps through the given tree, parametrizes the adaptors, and builds and algorithm. It is used by the buildup and builddown functions but is also helpful in testing.","title":"(wd.)getres"},{"location":"libs/wdmodels/#usage_31","text":"getres(A : B)~getres(A : B); Where: * (A : B) : is a partial connection tree composed of WD adaptors Note: This function cannot be used on a complete WD tree. When called on an unadapted adaptor (u_ prefix), it will create errors","title":"Usage"},{"location":"libs/wdmodels/#wdparres","text":"Function for determining the upward-facing port resistance of a partial WD connection tree. It recursively steps through the given tree, parametrizes the adaptors, and builds and algorithm. It is used by the buildup and builddown functions but is also helpful in testing. This function is a parallelized version of getres.","title":"(wd.)parres"},{"location":"libs/wdmodels/#usage_32","text":"parres((A , B))~parres((A , B)); Where: * (A , B) : is a partial connection tree composed of WD adaptors Note: This function cannot be used on a complete WD tree. When called on an unadapted adaptor (u_ prefix), it will create errors","title":"Usage"},{"location":"libs/wdmodels/#wdbuildout","text":"Function for creating the output matrix for a WD connection tree. It recursively steps through the given tree and creates an output matrix passing only outputs.","title":"(wd.)buildout"},{"location":"libs/wdmodels/#usage_33","text":"buildout( A : B ); Where: * (A : B) : is a connection tree composed of WD adaptors","title":"Usage"},{"location":"libs/wdmodels/#wdbuildtree","text":"Function for building the functioning DSP model from a WD connection tree. It recursively steps through the given tree, parametrizes the adaptors, and builds the algorithm.","title":"(wd.)buildtree"},{"location":"libs/wdmodels/#usage_34","text":"buildtree(A : B); Where: * (A : B) : a connection tree composed of WD adaptors","title":"Usage"},{"location":"libs/webaudio/","text":"webaudio.lib This library implement WebAudio filters, using their C++ version as a starting point, taken from Mozilla Firefox implementation. (wa.)lowpass2 Standard second-order resonant lowpass filter with 12dB/octave rolloff. Frequencies below the cutoff pass through, frequencies above it are attenuated. Usage _: lowpass2(f0, Q, dtune) :_ Where: f0 : cutoff frequency in Hz Q : the quality factor dtune : detuning of the frequency in cents Reference https://searchfox.org/mozilla-central/source/dom/media/webaudio/blink/Biquad.cpp#98 (wa.)highpass2 Standard second-order resonant highpass filter with 12dB/octave rolloff. Frequencies below the cutoff are attenuated, frequencies above it pass through. Usage _: highpass2(f0, Q, dtune) :_ Where: f0 : cutoff frequency in Hz Q : the quality factor dtune : detuning of the frequency in cents Reference https://searchfox.org/mozilla-central/source/dom/media/webaudio/blink/Biquad.cpp#127 (wa.)bandpass2 Standard second-order bandpass filter. Frequencies outside the given range of frequencies are attenuated, the frequencies inside it pass through. Usage _: bandpass2(f0, Q, dtune) :_ Where: f0 : cutoff frequency in Hz Q : the quality factor dtune : detuning of the frequency in cents Reference https://searchfox.org/mozilla-central/source/dom/media/webaudio/blink/Biquad.cpp#334 (wa.)notch2 Standard notch filter, also called a band-stop or band-rejection filter. It is the opposite of a bandpass filter: frequencies outside the give range of frequencies pass through, frequencies inside it are attenuated. Usage _: notch2(f0, Q, dtune) :_ Where: f0 : cutoff frequency in Hz Q : the quality factor dtune : detuning of the frequency in cents Reference https://searchfox.org/mozilla-central/source/dom/media/webaudio/blink/Biquad.cpp#301 (wa.)allpass2 Standard second-order allpass filter. It lets all frequencies through, but changes the phase-relationship between the various frequencies. Usage _: allpass2(f0, Q, dtune) :_ Where: f0 : cutoff frequency in Hz Q : the quality factor dtune : detuning of the frequency in cents Reference https://searchfox.org/mozilla-central/source/dom/media/webaudio/blink/Biquad.cpp#268 (wa.)peaking2 Frequencies inside the range get a boost or an attenuation, frequencies outside it are unchanged. Usage _: peaking2(f0, gain, Q, dtune) :_ Where: f0 : cutoff frequency in Hz gain : the gain in dB Q : the quality factor dtune : detuning of the frequency in cents Reference https://searchfox.org/mozilla-central/source/dom/media/webaudio/blink/Biquad.cpp#233 (wa.)lowshelf2 Standard second-order lowshelf filter. Frequencies lower than the frequency get a boost, or an attenuation, frequencies over it are unchanged. _: lowshelf2(f0, gain, dtune) :_ Where: f0 : cutoff frequency in Hz gain : the gain in dB dtune : detuning of the frequency in cents Reference https://searchfox.org/mozilla-central/source/dom/media/webaudio/blink/Biquad.cpp#169 (wa.)highshelf2 Standard second-order highshelf filter. Frequencies higher than the frequency get a boost or an attenuation, frequencies lower than it are unchanged. _: highshelf2(f0, gain, dtune) :_ Where: f0 : cutoff frequency in Hz gain : the gain in dB dtune : detuning of the frequency in cents Reference https://searchfox.org/mozilla-central/source/dom/media/webaudio/blink/Biquad.cpp#201","title":" webaudio "},{"location":"libs/webaudio/#webaudiolib","text":"This library implement WebAudio filters, using their C++ version as a starting point, taken from Mozilla Firefox implementation.","title":"webaudio.lib"},{"location":"libs/webaudio/#walowpass2","text":"Standard second-order resonant lowpass filter with 12dB/octave rolloff. Frequencies below the cutoff pass through, frequencies above it are attenuated.","title":"(wa.)lowpass2"},{"location":"libs/webaudio/#usage","text":"_: lowpass2(f0, Q, dtune) :_ Where: f0 : cutoff frequency in Hz Q : the quality factor dtune : detuning of the frequency in cents","title":"Usage"},{"location":"libs/webaudio/#reference","text":"https://searchfox.org/mozilla-central/source/dom/media/webaudio/blink/Biquad.cpp#98","title":"Reference"},{"location":"libs/webaudio/#wahighpass2","text":"Standard second-order resonant highpass filter with 12dB/octave rolloff. Frequencies below the cutoff are attenuated, frequencies above it pass through.","title":"(wa.)highpass2"},{"location":"libs/webaudio/#usage_1","text":"_: highpass2(f0, Q, dtune) :_ Where: f0 : cutoff frequency in Hz Q : the quality factor dtune : detuning of the frequency in cents","title":"Usage"},{"location":"libs/webaudio/#reference_1","text":"https://searchfox.org/mozilla-central/source/dom/media/webaudio/blink/Biquad.cpp#127","title":"Reference"},{"location":"libs/webaudio/#wabandpass2","text":"Standard second-order bandpass filter. Frequencies outside the given range of frequencies are attenuated, the frequencies inside it pass through.","title":"(wa.)bandpass2"},{"location":"libs/webaudio/#usage_2","text":"_: bandpass2(f0, Q, dtune) :_ Where: f0 : cutoff frequency in Hz Q : the quality factor dtune : detuning of the frequency in cents","title":"Usage"},{"location":"libs/webaudio/#reference_2","text":"https://searchfox.org/mozilla-central/source/dom/media/webaudio/blink/Biquad.cpp#334","title":"Reference"},{"location":"libs/webaudio/#wanotch2","text":"Standard notch filter, also called a band-stop or band-rejection filter. It is the opposite of a bandpass filter: frequencies outside the give range of frequencies pass through, frequencies inside it are attenuated.","title":"(wa.)notch2"},{"location":"libs/webaudio/#usage_3","text":"_: notch2(f0, Q, dtune) :_ Where: f0 : cutoff frequency in Hz Q : the quality factor dtune : detuning of the frequency in cents","title":"Usage"},{"location":"libs/webaudio/#reference_3","text":"https://searchfox.org/mozilla-central/source/dom/media/webaudio/blink/Biquad.cpp#301","title":"Reference"},{"location":"libs/webaudio/#waallpass2","text":"Standard second-order allpass filter. It lets all frequencies through, but changes the phase-relationship between the various frequencies.","title":"(wa.)allpass2"},{"location":"libs/webaudio/#usage_4","text":"_: allpass2(f0, Q, dtune) :_ Where: f0 : cutoff frequency in Hz Q : the quality factor dtune : detuning of the frequency in cents","title":"Usage"},{"location":"libs/webaudio/#reference_4","text":"https://searchfox.org/mozilla-central/source/dom/media/webaudio/blink/Biquad.cpp#268","title":"Reference"},{"location":"libs/webaudio/#wapeaking2","text":"Frequencies inside the range get a boost or an attenuation, frequencies outside it are unchanged.","title":"(wa.)peaking2"},{"location":"libs/webaudio/#usage_5","text":"_: peaking2(f0, gain, Q, dtune) :_ Where: f0 : cutoff frequency in Hz gain : the gain in dB Q : the quality factor dtune : detuning of the frequency in cents","title":"Usage"},{"location":"libs/webaudio/#reference_5","text":"https://searchfox.org/mozilla-central/source/dom/media/webaudio/blink/Biquad.cpp#233","title":"Reference"},{"location":"libs/webaudio/#walowshelf2","text":"Standard second-order lowshelf filter. Frequencies lower than the frequency get a boost, or an attenuation, frequencies over it are unchanged. _: lowshelf2(f0, gain, dtune) :_ Where: f0 : cutoff frequency in Hz gain : the gain in dB dtune : detuning of the frequency in cents","title":"(wa.)lowshelf2"},{"location":"libs/webaudio/#reference_6","text":"https://searchfox.org/mozilla-central/source/dom/media/webaudio/blink/Biquad.cpp#169","title":"Reference"},{"location":"libs/webaudio/#wahighshelf2","text":"Standard second-order highshelf filter. Frequencies higher than the frequency get a boost or an attenuation, frequencies lower than it are unchanged. _: highshelf2(f0, gain, dtune) :_ Where: f0 : cutoff frequency in Hz gain : the gain in dB dtune : detuning of the frequency in cents","title":"(wa.)highshelf2"},{"location":"libs/webaudio/#reference_7","text":"https://searchfox.org/mozilla-central/source/dom/media/webaudio/blink/Biquad.cpp#201","title":"Reference"}]}
\ No newline at end of file
diff --git a/docs/sitemap.xml b/docs/sitemap.xml
index 3d0c9702..ad753c75 100644
--- a/docs/sitemap.xml
+++ b/docs/sitemap.xml
@@ -1,143 +1,143 @@
None
- 2021-01-13
+ 2021-01-15
daily
None
- 2021-01-13
+ 2021-01-15
daily
None
- 2021-01-13
+ 2021-01-15
daily
None
- 2021-01-13
+ 2021-01-15
daily
None
- 2021-01-13
+ 2021-01-15
daily
None
- 2021-01-13
+ 2021-01-15
daily
None
- 2021-01-13
+ 2021-01-15
daily
None
- 2021-01-13
+ 2021-01-15
daily
None
- 2021-01-13
+ 2021-01-15
daily
None
- 2021-01-13
+ 2021-01-15
daily
None
- 2021-01-13
+ 2021-01-15
daily
None
- 2021-01-13
+ 2021-01-15
daily
None
- 2021-01-13
+ 2021-01-15
daily
None
- 2021-01-13
+ 2021-01-15
daily
None
- 2021-01-13
+ 2021-01-15
daily
None
- 2021-01-13
+ 2021-01-15
daily
None
- 2021-01-13
+ 2021-01-15
daily
None
- 2021-01-13
+ 2021-01-15
daily
None
- 2021-01-13
+ 2021-01-15
daily
None
- 2021-01-13
+ 2021-01-15
daily
None
- 2021-01-13
+ 2021-01-15
daily
None
- 2021-01-13
+ 2021-01-15
daily
None
- 2021-01-13
+ 2021-01-15
daily
None
- 2021-01-13
+ 2021-01-15
daily
None
- 2021-01-13
+ 2021-01-15
daily
None
- 2021-01-13
+ 2021-01-15
daily
None
- 2021-01-13
+ 2021-01-15
daily
None
- 2021-01-13
+ 2021-01-15
daily
None
- 2021-01-13
+ 2021-01-15
daily
None
- 2021-01-13
+ 2021-01-15
daily
None
- 2021-01-13
+ 2021-01-15
daily
None
- 2021-01-13
+ 2021-01-15
daily
None
- 2021-01-13
+ 2021-01-15
daily
None
- 2021-01-13
+ 2021-01-15
daily
None
- 2021-01-13
+ 2021-01-15
daily
\ No newline at end of file
diff --git a/docs/sitemap.xml.gz b/docs/sitemap.xml.gz
index 0b13e4a5..a11f2b9a 100644
Binary files a/docs/sitemap.xml.gz and b/docs/sitemap.xml.gz differ
diff --git a/fds.lib b/fds.lib
index 5615fa2e..258793f4 100644
--- a/fds.lib
+++ b/fds.lib
@@ -323,7 +323,7 @@ linInterp2DOut(pointsX,pointsY,pointX,pointY) =
// * `T`: time coefficient
//------------------------------------------------------------------------------
route1D(points, R, T) = route(points*2+points*nCoeffs, points*nInputs,
- par(x, nPoints, connections(x)))
+ par(x, points, connections(x)))
with
{
connections(x) = par(k,nCoeffs,x*nCoeffs+k+1,C(x,k+1)),
@@ -502,7 +502,7 @@ with
hammerForce(uh,u)=select2((uh-u)>0,0,((uh-u)^alpha)*(-kH));
A = (2-omega0Sqr^2*k^2)/(1+sigma0*k);
B = (-1)*(1-sigma0*k)/(1+sigma0*k);
- forceCoeff = k^2/(1+sigma0*K);
+ forceCoeff = k^2/(1+sigma0*k);
};
//---------------------------------`(fd.)bow`-------------------------------