Faust (Functional Audio Stream) is an open-source, functional programming language, specifically designed for real-time audio signal processing and synthesis. Faust generates C++, as well as other target languages, for signal processing applications.
Faust programs may be targeted for many different platforms via what is known as “an
architecture”. The script in this repository faust2sam
calls the Faust compiler using an architecture that is specific to the Analog Devices SHARC Audio Module platform. When an algorithm is compiled using
faust2sam
, three C++ source code files are generated for the SHARC Audio Module. These files may then be inserted into a CrossCore Embedded Studio (CCES)
project which can then be compiled into an application that runs on the SHARC Audio
Module hardware.
For more information on faust2sam
see Faust Integration with the Analog Devices SHARC Audio Module Platform in this directory.
This directory contains the following
faust-addition
- These are additions to be added to an existing Faust distribution with the add_faust_additions.tcsh script.
faust-examples
- Example faust algorithms (.dsp) files along with pre-compiled into C++ versions of the algorithms.
Example | Description |
---|---|
16-channel-volume |
A 16 channel MIDI controlled volume example |
chorus |
A chorus stompbox |
echo |
An echo stomp box |
effects |
An effects chain of echo : flanger : chorus : reverb |
flanger |
A flanger stompbox |
freeverb |
A reverb |
virtualanalog |
A virtual analog modeling synth |
sawtooth_synth |
A simple MIDI controlled sawtooth synth |
sine_synth |
A simple MIDI controlled sine synth |
volume |
A simple MIDI controlled volume |
buildAllFaustExamples.tcsh
- This is a script that will build all the SHARC Audio Module Demos
For each of the examples there is a directory named <algorithm>-sam
. Within this directory are the following 3 files. This is the faust compiled implementation of the algorithm.
fast_pow2.h
samFaustDSP.cpp
samFaustDSP.h
For each of of the examples there is a file README.md
This file describes the algorithm as well as the MIDI controller mappings. Note that for every algorithm the pots on the DIY board are sending MIDI controllers CC-1,2,3, and the pushbuttons are sending CC-102,103,104,105
These algorithms are meant to be used in conjunction with the SHARC Audio Module Bare Metal SDK.
Within the SDK there is a subproject directory for each core:
sam_baremetal_framework_core0
sam_baremetal_framework_core1
sam_baremetal_framework_core2
Core 1 and Core 2 are SHARC DSPs. You can place the 3 faust algorithm files in either:
sam_baremetal_framework_core1/src/faust
or
sam_baremetal_framework_core2/src/faust
In addition there is a header file that is common across all cores called audio_system_config.h
. In this file the following pre-processor variables should be set in the following way. The example below indicates that a Faust algorithm will only be running on Core1 and that Core2 will be simply passing audio to the codec.
#define SAM_DIY_MIDI_BOARD_PRESENT TRUE
…
#define FAUST_INSTALLED TRUE
…
#define USE_FAUST_ALGORITHM_CORE1 TRUE
#define USE_FAUST_ALGORITHM_CORE2 FALSE
…
#define MIDI_UART_MANAGED_BY_SHARC1_CORE TRUE
-
Copy
fast_pow2.h
,samFaustDSP.cpp
,samFaustDSP.h
to thesrc/Faust
directory for the core that you want to run on. -
Within CCES create a new workspace
-
Click
File
>Import
>Existing Projects into Workspace
and follow theNext
buttons -
In the Project explorer open
common/audio_system_config.h
and select a core for the algorithm withUSE_FAUST_ALGORITHM_CORE1
orUSE_FAUST_ALGORITHM_CORE2
. You can select any combination, no faust algorithms, either of the cores or even both cores. -
Under
Project
>Clean
do a clean build. For no faust algorithms the build will take about a minute. For faust algorithm the built may take up to 5 minutes for each core. -
Under the
Run
>Debug Configurations
menu setup a configuration to run. -
With an ICE-1000 or ICE-2000 emulator connected from your computer to the SHARC Audio Module board, run the code using
Run
>Debug
.