Content deleted Content added
m Bot: Fixing commonscat per Category:Commons category template with no category set. (Report error) |
Jerryobject (talk | contribs) Small WP:EoS WP:COPYEDITs. Add: Template:URL, Template:Official website. WP:LINKs: updates, cut needless WP:PIPEs. |
||
Line 1:
{{No footnotes|date=March 2015}}
{{Infobox software
Line 8 ⟶ 7:
| latest release version = 0.9.67
| latest release date = {{release date|2014|05|19}}
| operating system = [[Linux]], [[
| genre = Functional programming language for audio signal processing
| programming language = [[C++]]
| license = [[GNU General Public License|GPL]]
| website =
}}
'''FAUST''' (Functional AUdio STream) is a [[Domain specific language|___domain-specific]] [[purely functional]] [[programming language]] for implementing [[signal processing]] [[algorithms]] in the form of [[
==Overview==
The FAUST [[programming model]] combines a [[functional programming]] approach with a [[
* 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’s block
* Block
A FAUST program doesn’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):
<source lang=haskell>
Line 26 ⟶ 25:
</source>
The FAUST [[compiler]] translates FAUST code into a [[C++]] [[Object
The generated code works at the sample level. It is therefore suited to implement low-level [[Digital signal processing|DSP]] functions like [[Infinite impulse response|recursive filters]]. The code may also be [[Embedded software|embedded]]. It is self-contained and does not depend on any DSP library or [[runtime system]]. It has a very deterministic behavior and a constant memory
The
FAUST is a textual language but block
==Example
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:
<source lang=haskell>
Line 47 ⟶ 46:
process = +;
</source>
[[File:Faust-simple-block-diagram.jpg|thumb|Block
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 (
Some [[signal processing]] primitives are specific to FAUST. For example the delay operator <code>@</code> takes two input signals: X (the signal to be delayed) and D (the delay to be applied), and produces an output signal Y such that Y(t) = X(t − D(t)).
==Block
Contrary to [[Max (software)|Max-like]] [[visual programming languages]] where the user does manual connections, FAUST primitives are assembled in [[block diagram]]s by using a set of high-level block diagram [[Function composition|composition]] operations.
[[File:Faust-simple-block-diagrams.jpg|thumb|upright=1.75|Simple examples of block
{| class="wikitable"
|+ The block
| f~g || Recursive composition (precedence 4)
|-
Line 85 ⟶ 84:
process = *(0.5);
</source>
The recursive composition operator <code>~</code> can be used to create block
<source lang=haskell>
process = + ~ _;
</source>
==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.
[[File:Faust-mixer-jackqt.jpg|thumb|Screenshot of mixer.dsp (available in the FAUST distribution) using the jack-qt architecture]]
Line 130 ⟶ 129:
|}
==Generating block diagrams==
A useful option makes it possible to
==Connection to Arrows==
The Faust semantics is almost the same as that of [[Haskell (programming language)|Haskell
However, the Arrow type class is not bound to signal processors.
Line 152 ⟶ 151:
|}
The Arrow combinators are more restrictive than their FAUST counterparts, e.g., the nesting of parallel composition is preserved, and inputs of the operands of <code>&&&</code> must match exactly.
==References==
Line 445 ⟶ 442:
==External links==
{{Commons category|FAUST (programming language)}}
*
* [http://faudiostream.sourceforge.net/ FAUST on SourceForge]: Faust repository and mailing lists
|