Content deleted Content added
Removed as Faust algebra also prevents from combining signal processors that don't match |
no blank lines in list for accessibility; fix heading style, ndash; rm trailing space; rm ref=harv, no lines, thus +no footnote; +commons categorys |
||
Line 1:
{{Colloquial|date=September 2012}}
{{No footnotes|date=March 2015}}
{{Infobox software
| name = FAUST
| developer = GRAME, Centre National de Création Musicale
| author = Yann Orlarey, Dominique Fober, Stéphane Letz
| released = {{release date|2002}}
| latest release version = 0.9.67
| latest release date = {{release date|2014|05|19}}
Line 17 ⟶ 18:
The language is based on a simple and well defined formal semantics. A FAUST program denotes a signal processor, a mathematical function that transforms input signals into output signals.
==
The FAUST programming model combines a ''functional programming approach'' with a ''block-diagram syntax'':
* The functional programming approach provides a natural framework for signal processing. Digital signals are modeled as discrete functions of time, signal processors as second order functions that operate on them, and FAUST’s block-diagram ''composition operators'', used to combine signal processors together, as third order functions, etc. .
Line 30 ⟶ 31:
The generated code works at the sample level. It is therefore suited to implement low-level [[Digital signal processing|DSP]] functions like recursive filters. Moreover the code can be easily embedded. It is self-contained and does not depend on any DSP library or runtime system. It has a very deterministic behaviour and a constant memory footprint.
The semantic of FAUST is simple and well defined. This is not just of academic interest. It allows the FAUST compiler to be ''semantically driven''. Instead of compiling a program literally, it compiles the mathematical function it denotes. This feature is useful for example to promote components reuse while preserving optimal performance. Moreover having access to the exact semantics of a FAUST program can simplify preservation issues.
FAUST is a textual language but nevertheless block-diagram oriented. It actually combines two approaches: functional programming and algebraic block-diagrams. The key idea is to view block-diagram construction as function composition. For that, FAUST relies on a ''block-diagram algebra'' of five composition operations.
Line 155 ⟶ 156:
e.g. the nesting of parallel composition is preserved
and inputs of the operands of <code>&&&</code> must match exactly.
==References==
{{Reflist}}
{{Refbegin}}
* {{cite journal
| first1 = Romain
| last1 = Michon
Line 170:
| pages = 199–204
| year = 2011
}}
* {{cite journal▼
▲*{{cite journal
| first1 = Dominique
| last1 = Fober
Line 184 ⟶ 183:
| pages = 213–216
| year = 2011
}}
* {{cite journal▼
▲*{{cite journal
| first1 = Julius O. III
| last1 = Smith
Line 196 ⟶ 194:
| pages = 361–364
| year = 2011
}}
* {{cite journal▼
▲*{{cite journal
|first1 = Pierre
|last1 = Jouvelot
Line 204 ⟶ 201:
|last2 = Orlarey
|title = Dependent Vector Types for Data Structuring in Multirate Faust
|journal = Computer Languages, Systems and Structures
|url = http://faust.grame.fr/images/faust-doc/papers/faust-elsevier2011.pdf
|year = 2011
}}
* {{Cite web
| first = Julius O.
Line 215 ⟶ 211:
| url = https://ccrma.stanford.edu/~jos/spf/aspf.pdf
| year = 2011
}}
* {{cite journal▼
▲*{{cite journal
| first3 = Dominique
| last3 = Fober
Line 228 ⟶ 223:
| url = http://faust.grame.fr/images/faust-doc/papers/faust-CFA-2010.pdf
| year = 2010
}}
* {{cite journal▼
▲*{{cite journal
| first3 = Dominique
| last3 = Fober
Line 241 ⟶ 235:
| url = http://lac.linuxaudio.org/2010/papers/17.pdf
| year = 2010
}}
* {{cite journal
| first = Albert
Line 251 ⟶ 244:
| page = 117
| year = 2010
}}
* {{cite journal
| first1 = Jérôme
Line 271 ⟶ 263:
| pages = 369–372
| year = 2010
}}
* {{cite journal
| first1 = Pierre
Line 283 ⟶ 274:
| pages = 345–352
| year = 2010
}}
* {{cite journal
| first3 = Dominique
Line 296 ⟶ 286:
| url = http://faust.grame.fr/test/images/faust-doc/papers/faustLAC09.pdf
| year = 2009
}}
* {{cite book
| first1 = Pierre
Line 307 ⟶ 296:
| url = http://faust.grame.fr/images/faust-doc/papers/multirate-faust.pdf
| year = 2009
}}
* {{cite journal
| first2 = Dominique
Line 319 ⟶ 307:
| url = http://smc2009.smcnetwork.org/programme/pdfs/232.pdf
| year = 2009
}}
* {{cite book
| first2 = Dominique
Line 334 ⟶ 321:
| isbn = 978-2-7521-0054-2
| year = 2009
}}
* {{cite journal
| first3 = Dominique
Line 347 ⟶ 333:
| url = http://faust.grame.fr/images/faust-doc/papers/jack-faust-multicore.pdf
| year = 2008
}}
* {{cite journal
| first = Albert
Line 357 ⟶ 342:
| page = 24
| year = 2007
}}
* {{Cite book
| first = Julius O.
Line 368 ⟶ 352:
| isbn = 978-0-9745607-1-7
| url = http://books.google.com/books?id=pC1iCQUAsHEC&pg=PA417
| pages = 417-?
}} * {{cite journal
| first1 = Albert
Line 381 ⟶ 365:
| url = http://lac.zkm.de/2006/papers/lac2006_orlarey_et_al.pdf
| year = 2006
}}
* {{cite journal
| first1 = Robert
Line 394 ⟶ 377:
| url = http://www.dafx.ca/proceedings/papers/p_287.pdf
| year = 2006
}}
* {{Cite book
| first1 = Yann
Line 412 ⟶ 394:
| page = 286
}}
* {{cite book
| first2 = Dominique
Line 424 ⟶ 405:
| url = http://faust.grame.fr/images/faust-doc/papers/faust-soft-computing.pdf
| year = 2004
}}
* {{cite journal
| first1 = Nicolas
Line 437 ⟶ 417:
| url = http://faust.grame.fr/images/faust-doc/papers/JIM2003vect.pdf
| year = 2003
}}
* {{cite journal
| first3 = Stéphane
Line 450 ⟶ 429:
| url = http://faust.grame.fr/images/faust-doc/papers/faust-jim2002.pdf
| year = 2002
}}
* {{cite journal
| first3 = Stéphane
Line 463 ⟶ 441:
| url = http://faust.grame.fr/images/faust-doc/papers/faust-icmc2002.pdf
| year = 2002
}}
{{Refend}}
==External links==
{{commons category}}
* [http://faust.grame.fr/ FAUST home page]: Online compiler, support, documentation, news, etc.
* [http://faudiostream.sourceforge.net/ FAUST on SourceForge]: Faust repository and mailing lists
|