X-Git-Url: https://scm.cri.ensmp.fr/git/Faustine.git/blobdiff_plain/1059e1cc0c2ecfa237406949aa26155b6a5b9154..66f23d4fabf89ad09adbd4dfc15ac6b5b2b7da83:/interpreter/preprocessor/faust-0.9.47mr3/documentation/faust-quick-reference-src/chapters/introduction.tex diff --git a/interpreter/preprocessor/faust-0.9.47mr3/documentation/faust-quick-reference-src/chapters/introduction.tex b/interpreter/preprocessor/faust-0.9.47mr3/documentation/faust-quick-reference-src/chapters/introduction.tex new file mode 100644 index 0000000..9f69ab2 --- /dev/null +++ b/interpreter/preprocessor/faust-0.9.47mr3/documentation/faust-quick-reference-src/chapters/introduction.tex @@ -0,0 +1,55 @@ +\chapter{Introduction} + +\faust (\textit{Functional Audio Stream}) is a functional programming language specifically designed for real-time signal processing and synthesis. \faust targets high-performance signal processing applications and audio plug-ins for a variety of platforms and standards. + +\section{Design Principles} + +Various principles have guided the design of \faust : + +\begin{itemize} + +\item \faust is a \textit{specification language}. It aims at providing an adequate notation to describe \textit{signal processors} from a mathematical point of view. \faust is, as much as possible, free from implementation details. + +\item \faust programs are fully compiled, not interpreted. The compiler translates \faust programs into equivalent C++ programs taking care of generating the most efficient code. The result can generally compete with, and sometimes even outperform, C++ code written by seasoned programmers. + +\item The generated code works at the sample level. It is therefore suited to implement low-level DSP functions like recursive filters. Moreover the code can be easily embedded. It is self-contained and doesn't depend of any DSP library or runtime system. It has a very deterministic behavior and a constant memory footprint. + +\item The semantic of \faust is simple and well defined. This is not just of academic interest. It allows the \faust compiler to be \emph{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. + +\item \faust is a textual language but nevertheless block-diagram oriented. It actually combines two approaches: \textit{functional programming} and \textit{algebraic block-diagrams}. The key idea is to view block-diagram construction as function composition. For that purpose, \faust relies on a \emph{block-diagram algebra} of five composition operations (\lstinline': , ~ <: :>'). + +\item Thanks to the notion of \textit{architecture}, \faust programs can be easily deployed on a large variety of audio platforms and plugin formats without any change to the \faust code. + +\end{itemize} + +\section{Signal Processor Semantic} +A \faust program describes a \emph{signal processor}. +The role of a \textit{signal processor} is to transforms a group of (possibly empty) \emph{input signals} in order to produce a group of (possibly empty) \emph{output signals}. +Most audio equipments can be modeled as \emph{signal processors}. +They have audio inputs, audio outputs as well as control signals interfaced with sliders, knobs, vu-meters, etc. + +More precisely : + +\begin{itemize} + +\item A \emph{signal} $s$ is a discrete function of time $s:\mathbb{N}\rightarrow\mathbb{R}$ +\marginpar{\faust considers two type of signals: \emph{integer signals} ($s:\mathbb{N}\rightarrow\mathbb{Z}$) and \emph{floating point signals} ($s:\mathbb{N}\rightarrow\mathbb{Q}$). Exchanges with the outside world are, by convention, made using floating point signals. The full range is represented by sample values between -1.0 and +1.0.}. +The value of signal $s$ at time $t$ is written $s(t)$. +The set $\mathbb{S}=\mathbb{N}\rightarrow\mathbb{R}$ is the set of all possible signals. + +\item A group of $n$ signals (a \emph{n}-tuple of signals) is written +$(s_{1},\ldots,s_{n})\in \mathbb{S}^{n}$. +The \emph{empty tuple}, single element of $\mathbb{S}^{0}$ is notated $()$. + +\item A \emph{signal processors} $p$, is a function from +\emph{n}-tuples of signals to \emph{m}-tuples of signals +$p:\mathbb{S}^{n}\rightarrow\mathbb{S}^{m}$. The set $\mathbb{P}=\bigcup_{n,m}\mathbb{S}^{n}\rightarrow\mathbb{S}^{m}$ is the +set of all possible signal processors. + +\end{itemize} + +As an example, let's express the semantic of the \faust primitive \lstinline'+'. Like any \faust expression, it is a signal processor. Its signature is $\mathbb{S}^{2}\rightarrow\mathbb{S}$. It takes two input signals $X_0$ and $X_1$ and produce an output signal $Y$ such that $Y(t) = X_0(t)+X_1(t)$. + +Numbers are signal processors too. For example the number $3$ has signature $\mathbb{S}^{0}\rightarrow\mathbb{S}$. It takes no input signals and produce an output signal $Y$ such that $Y(t) = 3$. + +