FAUST (programming language): Difference between revisions

Content deleted Content added
m Minor date error
Tags: Visual edit Mobile edit Mobile web edit
Add category
 
(8 intermediate revisions by 8 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 = FAUST
| developer = GRAME, Centre National de Création Musicale
| author = Yann Orlarey, Dominique Fober, Stéphane Letz
| released = {{releasestart date|2002}}
| latest release version = 2.3760.3<ref>[https://github.com/grame-cncm/faust/releases Releases · grame-cncm/faust · GitHub]</ref>
| latest release date = {{releasestart date|20212023|1006|3014}}
| operating system = [[Linux]], [[OS X]], [[Microsoft Windows|Windows]], [[Unix]]
| genre = Functional programming language for audio signal processing
| repo = {{URL|https://github.com/grame-cncm/faust/}}
| programming language = [[C++]]
| license = [[GNU General Public License|GPL]]
| website = {{URL|faust.grame.fr}}
}}
{{Portal|Free and open-source software}}
 
'''FAUST''' (Functional AUdio STream) is a [[Domain ___domain-specific language|___domain-specific]] [[Purelypurely functional programming|purely functional]] [[programming language]] for implementing [[signal processing]] [[algorithms]] in the form of [[Library (computing)|libraries]], [[audio plug-ins]], or standalone applications. A FAUST program denotes a signal processor: a mathematical function that is applied to some input signal and then fed out.
 
==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 FAUST’sFAUST's block diagram ''composition operators'', used to combine signal processors together, as third order functions, etc.
* 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 doesn’tdoesn't describe a sound or a group of sounds, but a [[Digital signal processing|signal processor]]. The program source is organized as a set of ''definitions'' with at least the definition of the keyword <code>process</code> (the equivalent of <code>main</code> in C):
<syntaxhighlight lang=haskell>
process = ...;
Line 37 ⟶ 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:
<syntaxhighlight lang="haskell">
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:
<syntaxhighlight lang="haskell">
process = _;
</syntaxhighlight>
Another example sums a stereo signal into a mono signal using the <code>+</code> primitive:
<syntaxhighlight lang="haskell">
process = +;
</syntaxhighlight>
Line 71 ⟶ 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:
<syntaxhighlight lang="haskell">
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.
<syntaxhighlight lang="haskell">
process = _,_;
</syntaxhighlight>
These operators can be arbitrarily combined arbitrarily. The following code multiplies an input signal with 0.5:
<syntaxhighlight lang="haskell">
process = _,0.5 : *;
</syntaxhighlight>
The above may be rewritten in [[currying|curried]] form:
<syntaxhighlight lang="haskell">
process = *(0.5);
</syntaxhighlight>
Line 98 ⟶ 99:
{| class="wikitable"
|+ Some architecture files available for FAUST
! File
| alsa-gtk.cpp || ALSA application + GTK
! Architecture
|-
| alsa-gtk.cpp || ALSA application + [[GTK]]
|-
| alsa-qt.cpp || ALSA application + QT4[[Qt (software)|Qt]] 4
|-
| android.cpp || Android applications
Line 106 ⟶ 110:
| au.cpp || Audio Unit plug-in
|-
| ca-qt.cpp || CoreAudio application + QT4Qt 4
|-
| ios-coreaudio.cpp || iPhone and iPad applications
Line 112 ⟶ 116:
| jack-gtk.cpp || JACK application + GTK
|-
| jack-qt.cpp || JACK application + QT4Qt 4
|-
| ladspa.cpp || LADSPA plug-in
Line 118 ⟶ 122:
| max-msp.cpp || Max MSP plug-in
|-
| pd.cpp || PuredataPure Data plug-in
|-
| q.cpp || Q language plug-in
|-
| supercollider.cpp || SupercolliderSuperCollider plug-in
|-
| vst.cpp || VST plug-in
Line 134 ⟶ 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 don’tdon't compile programs literally. But because of the complex semantics of C/C++ (due to side effects, pointer aliasing, etc.) they can’tcan't go very far in that direction. This is a distinct advantage of a purely functional language: it allows compilers to do very advanced optimisations.
 
==Arrows-like semantics==
Line 193 ⟶ 197:
| year = 2011
}}
* {{cite journal
|first1=Pierre
|last1=Jouvelot
Line 202 ⟶ 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 210 ⟶ 218:
| year = 2011
}}
* {{cite journal
|first3=Dominique
|last3=Fober
Line 221 ⟶ 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 243 ⟶ 251:
| year = 2010
}}
* {{cite journal
|first1=Jérôme
|last1=Barthélemy
Line 261 ⟶ 269:
|pages=369–372
|year=2010
}}{{dead link|date=December 2016 |bot=InternetArchiveBot |fix-attempted=yes }}
* {{cite journal
| first1 = Pierre
Line 277 ⟶ 285:
| url-status = dead
}}
* {{cite journal
|first3=Dominique
|last3=Fober
Line 288 ⟶ 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 309 ⟶ 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 324 ⟶ 336:
| year = 2009
}}{{Dead link|date=December 2019 |bot=InternetArchiveBot |fix-attempted=yes }}
* {{cite journal
|first3=Dominique
|last3=Fober
Line 335 ⟶ 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 349 ⟶ 361:
| last = Smith III
| title = Introduction to Digital Filters: With Audio Applications
| chapter = Appendix K. Digital Filtering in Faust and PD
| publisher = W3K Publishing
| year = 2007
| isbn = 978-0-9745607-1-7
| chapter-url = https://books.google.com/books?id=pC1iCQUAsHEC&pg=PA417
| pages = 417-417–?
}}
* {{cite journal
Line 408 ⟶ 420:
| year = 2004
}}{{Dead link|date=December 2019 |bot=InternetArchiveBot |fix-attempted=yes }}
* {{cite journal
|first1=Nicolas
|last1=Scaringella
Line 419 ⟶ 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 431 ⟶ 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 443 ⟶ 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 449 ⟶ 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]]