Content deleted Content added
Rescuing 1 sources and tagging 0 as dead. #IABot (v2.0beta15) |
Add category |
||
(17 intermediate revisions by 15 users not shown) | |||
Line 1:
{{Short description|Audio programming language}}
{{redirect|FAUST|other uses|Faust (disambiguation){{!}}Faust}}
{{More footnotes needed|date=March 2015}}
{{Infobox software
| name
| developer
| author
| released
| latest release version = 2.
| latest release date
| operating system
| genre
| repo = {{URL|https://github.com/grame-cncm/faust/}}
| programming language
| license
| website
}}
{{Portal|Free and open-source software}}
'''FAUST''' (Functional AUdio STream) is a [[
==Overview==
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 [[Sequence|discrete functions]] of time, signal processors as [[Higher-order function|second order functions]] that operate on them, and
* Block diagrams, even if purely textual as in FAUST, promote a modular approach to signal processing that complies with sound engineers' and audio developers' habits.
A FAUST program
<
process = ...;
</syntaxhighlight>
The FAUST [[compiler]] translates FAUST code into a [[C++]] [[Object-oriented programming|object]], which may then interface with other C++ code to produce a full program.
Line 36 ⟶ 38:
==Example code==
FAUST programs define a <code>process</code> function that operates on incoming data. This is analogous to the <code>main</code> function in most programming languages. The following is an example that produces silence:
<
process = 0;
</syntaxhighlight>
The second example copies the input signal to the output. It involves the <code>_</code> primitive that denotes the [[identity function]] for signals:
<
process = _;
</syntaxhighlight>
Another example sums a stereo signal into a mono signal using the <code>+</code> primitive:
<
process = +;
</syntaxhighlight>
[[File:Faust-simple-block-diagram.jpg|thumb|Block diagrams generated by Faust from some simple programs]]
Most FAUST primitives are analogous to their C counterpart on numbers, but lifted to signals. For example, the FAUST primitive <code>sin</code> operates on a signal X by applying the [[C (programming language)|C]] function <code>sin</code> to each sample X[t]. All C numerical functions have their counterpart in FAUST.
Line 70 ⟶ 72:
Using the sequential composition operator <code>:</code> the output of <code>+</code> can be routed to the input of <code>abs</code> to compute the [[absolute value]] of the signal:
<
process = + : abs;
</syntaxhighlight>
Here is an example of parallel composition using the <code>,</code> operator that arranges its left and right expressions in parallel. This is analogous to a stereo cable.
<
process = _,_;
</syntaxhighlight>
These operators can be
<
process = _,0.5 : *;
</syntaxhighlight>
The above may be rewritten in [[currying|curried]] form:
<
process = *(0.5);
</syntaxhighlight>
The recursive composition operator <code>~</code> can be used to create block diagrams with cycles (that include an implicit one-sample delay). Here is an example of an integrator that takes an input signal X and computes an output signal Y such that Y(t) = X(t) + Y(t−1):
<
process = + ~ _;
</syntaxhighlight>
==Generating full applications==
Using specific ''architecture files'', a FAUST program can be used to produce code for a variety of platforms and plug-in formats. These architecture files act as wrappers and describe the interactions with the host audio and GUI system. {{As of|
[[File:Faust-mixer-jackqt.jpg|thumb|Screenshot of mixer.dsp (available in the FAUST distribution) using the jack-qt architecture]]
Line 97 ⟶ 99:
{| class="wikitable"
|+ Some architecture files available for FAUST
! File
| alsa-gtk.cpp || ALSA application + GTK▼
! Architecture
|-
| alsa-
|-
|-
| android.cpp || Android applications
Line 105 ⟶ 110:
| au.cpp || Audio Unit plug-in
|-
| ca-qt.cpp || CoreAudio application +
|-
| ios-coreaudio.cpp || iPhone and iPad applications
Line 111 ⟶ 116:
| jack-gtk.cpp || JACK application + GTK
|-
| jack-qt.cpp || JACK application +
|-
| ladspa.cpp || LADSPA plug-in
Line 117 ⟶ 122:
| max-msp.cpp || Max MSP plug-in
|-
| pd.cpp ||
|-
| q.cpp || Q language plug-in
|-
| supercollider.cpp ||
|-
| vst.cpp || VST plug-in
Line 133 ⟶ 138:
A useful option makes it possible to generate the block diagram representation of the program as one or more SVG graphic files.
It is useful to note the difference between the block diagram and the generated C++ code. As stated, the key idea here is not to compile the block diagram literally, but the mathematical function it denotes. Modern C/C++ compilers also
==Arrows-like semantics==
Line 141 ⟶ 146:
{| class="wikitable"
|+ Equivalences between FAUST and Arrow combinators
| <code>f~g</code> ||
|-
| <code>f,g</code> || <code>f***g</code>
Line 192 ⟶ 197:
| year = 2011
}}
* {{cite journal
|first1=Pierre
|last1=Jouvelot
Line 201 ⟶ 206:
|url=http://faust.grame.fr/images/faust-doc/papers/faust-elsevier2011.pdf
|year=2011
|volume=37
}}{{dead link|date=December 2016 |bot=InternetArchiveBot |fix-attempted=yes }}▼
|issue=3
|pages=113–131
|doi=10.1016/j.cl.2011.03.001
▲ }}{{dead link|date=December 2016 |bot=InternetArchiveBot |fix-attempted=yes }}
* {{Cite web
| first = Julius O.
Line 209 ⟶ 218:
| year = 2011
}}
* {{cite journal
|first3=Dominique
|last3=Fober
Line 220 ⟶ 229:
|url=http://faust.grame.fr/images/faust-doc/papers/faust-CFA-2010.pdf
|year=2010
}}{{dead link|date=December 2016 |bot=InternetArchiveBot |fix-attempted=yes }}
* {{cite journal
| first3 = Dominique
Line 242 ⟶ 251:
| year = 2010
}}
* {{cite journal
|first1=Jérôme
|last1=Barthélemy
Line 260 ⟶ 269:
|pages=369–372
|year=2010
}}{{dead link|date=December 2016 |bot=InternetArchiveBot |fix-attempted=yes }}
* {{cite journal
| first1 = Pierre
Line 274 ⟶ 283:
| archive-url = https://web.archive.org/web/20120407043121/http://smcnetwork.org/files/proceedings/2010/51.pdf
| archive-date = 2012-04-07
|
}}
* {{cite journal
|first3=Dominique
|last3=Fober
Line 287 ⟶ 296:
|url=http://faust.grame.fr/test/images/faust-doc/papers/faustLAC09.pdf
|year=2009
}}{{dead link|date=December 2016 |bot=InternetArchiveBot |fix-attempted=yes }}
* {{cite book
| first1 = Pierre
Line 297 ⟶ 306:
| url = http://faust.grame.fr/images/faust-doc/papers/multirate-faust.pdf
| year = 2009
}}{{Dead link|date=December 2019 |bot=InternetArchiveBot |fix-attempted=yes }}
* {{cite journal
| first2 = Dominique
Line 308 ⟶ 317:
| url = http://smc2009.smcnetwork.org/programme/pdfs/232.pdf
| year = 2009
| archive-date = 2012-04-25
| access-date = 2011-10-11
| archive-url = https://web.archive.org/web/20120425061241/http://smc2009.smcnetwork.org/programme/pdfs/232.pdf
| url-status = dead
}}
* {{cite book
Line 322 ⟶ 335:
| isbn = 978-2-7521-0054-2
| year = 2009
}}{{Dead link|date=December 2019 |bot=InternetArchiveBot |fix-attempted=yes }}
* {{cite journal
|first3=Dominique
|last3=Fober
Line 334 ⟶ 347:
|url=http://faust.grame.fr/images/faust-doc/papers/jack-faust-multicore.pdf
|year=2008
}}{{dead link|date=December 2016 |bot=InternetArchiveBot |fix-attempted=yes }}
* {{cite journal
| first = Albert
Line 348 ⟶ 361:
| last = Smith III
| title = Introduction to Digital Filters: With Audio Applications
| chapter = Appendix K.
| publisher = W3K Publishing
| year = 2007
| isbn = 978-0-9745607-1-7
| chapter-url = https://books.google.com/books?id=pC1iCQUAsHEC&pg=PA417
| pages =
}}
* {{cite journal
Line 391 ⟶ 404:
| publisher = Computer Music Association
| url = http://quod.lib.umich.edu/cgi/t/text/text-idx?c=icmc;idno=bbp2372.2005.*
|
| year = 2005
| page = 286
Line 406 ⟶ 419:
| url = http://faust.grame.fr/images/faust-doc/papers/faust-soft-computing.pdf
| year = 2004
}}{{Dead link|date=December 2019 |bot=InternetArchiveBot |fix-attempted=yes }}
* {{cite journal
|first1=Nicolas
|last1=Scaringella
Line 418 ⟶ 431:
|url=http://faust.grame.fr/images/faust-doc/papers/JIM2003vect.pdf
|year=2003
}}{{dead link|date=December 2016 |bot=InternetArchiveBot |fix-attempted=yes }}
* {{cite journal
|first3=Stéphane
|last3=Letz
Line 430 ⟶ 443:
|url=http://faust.grame.fr/images/faust-doc/papers/faust-jim2002.pdf
|year=2002
}}{{dead link|date=December 2016 |bot=InternetArchiveBot |fix-attempted=yes }}
* {{cite journal
|first3=Stéphane
|last3=Letz
Line 442 ⟶ 455:
|url=http://faust.grame.fr/images/faust-doc/papers/faust-icmc2002.pdf
|year=2002
}}{{dead link|date=December 2016 |bot=InternetArchiveBot |fix-attempted=yes }}
{{Refend}}
Line 448 ⟶ 461:
{{Commons category|FAUST (programming language)}}
* {{Official website|faust.grame.fr}}, online compiler, support, documentation, news, etc.
* {{GitHub|grame-cncm/faust}}
[[Category:Audio programming languages]]
[[Category:Programming languages created in 2002]]
|