FAUST: Functional AUdio STream Y. Orlarey , S . Letz , P . Jouvelot - - PowerPoint PPT Presentation

faust functional audio stream
SMART_READER_LITE
LIVE PREVIEW

FAUST: Functional AUdio STream Y. Orlarey , S . Letz , P . Jouvelot - - PowerPoint PPT Presentation

FAUST: Functional AUdio STream Y. Orlarey , S . Letz , P . Jouvelot + , D . Fober , K . Barkati (*)GRAME Centre National de Cr eation Musicale (+)CRI Mines ParisTech Synchron 2011, November 30, 2011 1-Introduction


slide-1
SLIDE 1

FAUST: Functional AUdio STream

  • Y. Orlarey∗, S.Letz∗, P.Jouvelot+, D.Fober∗, K.Barkati∗

(*)GRAME – Centre National de Cr´ eation Musicale (+)CRI – Mines ParisTech Synchron 2011, November 30, 2011

slide-2
SLIDE 2

1-Introduction

slide-3
SLIDE 3

Introduction

What is FAUST ?

FAUST stands for Functional AUdio STream:

It is a Domain-Specific Language for real-time audio signal processing and synthesis. It can be used to develop:

◮ audio effects, ◮ sound synthesizers ◮ real-time applications processing signals.

Who uses FAUST ?

◮ Developers of audio applications and plugins, ◮ Sound engineers and musical assistants ◮ Researchers in Computer Music

slide-4
SLIDE 4

Introduction

What is FAUST ?

FAUST stands for Functional AUdio STream:

It is a Domain-Specific Language for real-time audio signal processing and synthesis. It can be used to develop:

◮ audio effects, ◮ sound synthesizers ◮ real-time applications processing signals.

Who uses FAUST ?

◮ Developers of audio applications and plugins, ◮ Sound engineers and musical assistants ◮ Researchers in Computer Music

slide-5
SLIDE 5

Introduction

What is FAUST ?

FAUST stands for Functional AUdio STream:

It is a Domain-Specific Language for real-time audio signal processing and synthesis. It can be used to develop:

◮ audio effects, ◮ sound synthesizers ◮ real-time applications processing signals.

Who uses FAUST ?

◮ Developers of audio applications and plugins, ◮ Sound engineers and musical assistants ◮ Researchers in Computer Music

slide-6
SLIDE 6

Introduction

What is FAUST ?

FAUST stands for Functional AUdio STream:

It is a Domain-Specific Language for real-time audio signal processing and synthesis. It can be used to develop:

◮ audio effects, ◮ sound synthesizers ◮ real-time applications processing signals.

Who uses FAUST ?

◮ Developers of audio applications and plugins, ◮ Sound engineers and musical assistants ◮ Researchers in Computer Music

slide-7
SLIDE 7

Introduction

What is FAUST ?

FAUST stands for Functional AUdio STream:

It is a Domain-Specific Language for real-time audio signal processing and synthesis. It can be used to develop:

◮ audio effects, ◮ sound synthesizers ◮ real-time applications processing signals.

Who uses FAUST ?

◮ Developers of audio applications and plugins, ◮ Sound engineers and musical assistants ◮ Researchers in Computer Music

slide-8
SLIDE 8

Introduction

What is FAUST ?

FAUST stands for Functional AUdio STream:

It is a Domain-Specific Language for real-time audio signal processing and synthesis. It can be used to develop:

◮ audio effects, ◮ sound synthesizers ◮ real-time applications processing signals.

Who uses FAUST ?

◮ Developers of audio applications and plugins, ◮ Sound engineers and musical assistants ◮ Researchers in Computer Music

slide-9
SLIDE 9

Introduction

What is FAUST ?

FAUST stands for Functional AUdio STream:

It is a Domain-Specific Language for real-time audio signal processing and synthesis. It can be used to develop:

◮ audio effects, ◮ sound synthesizers ◮ real-time applications processing signals.

Who uses FAUST ?

◮ Developers of audio applications and plugins, ◮ Sound engineers and musical assistants ◮ Researchers in Computer Music

slide-10
SLIDE 10

Introduction

What is FAUST ?

FAUST stands for Functional AUdio STream:

It is a Domain-Specific Language for real-time audio signal processing and synthesis. It can be used to develop:

◮ audio effects, ◮ sound synthesizers ◮ real-time applications processing signals.

Who uses FAUST ?

◮ Developers of audio applications and plugins, ◮ Sound engineers and musical assistants ◮ Researchers in Computer Music

slide-11
SLIDE 11

Introduction

What is FAUST ?

FAUST stands for Functional AUdio STream:

It is a Domain-Specific Language for real-time audio signal processing and synthesis. It can be used to develop:

◮ audio effects, ◮ sound synthesizers ◮ real-time applications processing signals.

Who uses FAUST ?

◮ Developers of audio applications and plugins, ◮ Sound engineers and musical assistants ◮ Researchers in Computer Music

slide-12
SLIDE 12

Introduction

What is FAUST ?

FAUST stands for Functional AUdio STream:

It is a Domain-Specific Language for real-time audio signal processing and synthesis. It can be used to develop:

◮ audio effects, ◮ sound synthesizers ◮ real-time applications processing signals.

Who uses FAUST ?

◮ Developers of audio applications and plugins, ◮ Sound engineers and musical assistants ◮ Researchers in Computer Music

slide-13
SLIDE 13

Introduction

What is FAUST ?

FAUST stands for Functional AUdio STream:

It is a Domain-Specific Language for real-time audio signal processing and synthesis. It can be used to develop:

◮ audio effects, ◮ sound synthesizers ◮ real-time applications processing signals.

Who uses FAUST ?

◮ Developers of audio applications and plugins, ◮ Sound engineers and musical assistants ◮ Researchers in Computer Music

slide-14
SLIDE 14

Introduction

What is a FAUST program ?

A FAUST program describes a signal processor :

A signal processor is a signals to signals function A signal is a time to samples function Everything in FAUST is a signal processor Programming in FAUST is essentially combining signal processors

slide-15
SLIDE 15

Introduction

What is a FAUST program ?

A FAUST program describes a signal processor :

A signal processor is a signals to signals function A signal is a time to samples function Everything in FAUST is a signal processor Programming in FAUST is essentially combining signal processors

slide-16
SLIDE 16

Introduction

What is a FAUST program ?

A FAUST program describes a signal processor :

A signal processor is a signals to signals function A signal is a time to samples function Everything in FAUST is a signal processor Programming in FAUST is essentially combining signal processors

slide-17
SLIDE 17

Introduction

What is a FAUST program ?

A FAUST program describes a signal processor :

A signal processor is a signals to signals function A signal is a time to samples function Everything in FAUST is a signal processor Programming in FAUST is essentially combining signal processors

slide-18
SLIDE 18

Introduction

What is a FAUST program ?

A FAUST program describes a signal processor :

A signal processor is a signals to signals function A signal is a time to samples function Everything in FAUST is a signal processor Programming in FAUST is essentially combining signal processors

slide-19
SLIDE 19

Introduction

What is a FAUST program ?

A FAUST program describes a signal processor :

A signal processor is a signals to signals function A signal is a time to samples function Everything in FAUST is a signal processor Programming in FAUST is essentially combining signal processors

slide-20
SLIDE 20

Introduction

A simple FAUST program

Figure: Source code of a simple 1-voice mixer Figure: Resulting application

slide-21
SLIDE 21

Introduction

Main caracteristics

FAUST is based on several design principles:

High-level Specification language Purely functional approach Textual, block-diagram oriented, syntax Efficient sample level processing Fully compiled code Embeddable code (no runtime dependences, constant memory and CPU footprint) Easy deployment : single code multiple targets (from VST plugins to iPhone or standalone applications)

slide-22
SLIDE 22

Introduction

Main caracteristics

FAUST is based on several design principles:

High-level Specification language Purely functional approach Textual, block-diagram oriented, syntax Efficient sample level processing Fully compiled code Embeddable code (no runtime dependences, constant memory and CPU footprint) Easy deployment : single code multiple targets (from VST plugins to iPhone or standalone applications)

slide-23
SLIDE 23

Introduction

Main caracteristics

FAUST is based on several design principles:

High-level Specification language Purely functional approach Textual, block-diagram oriented, syntax Efficient sample level processing Fully compiled code Embeddable code (no runtime dependences, constant memory and CPU footprint) Easy deployment : single code multiple targets (from VST plugins to iPhone or standalone applications)

slide-24
SLIDE 24

Introduction

Main caracteristics

FAUST is based on several design principles:

High-level Specification language Purely functional approach Textual, block-diagram oriented, syntax Efficient sample level processing Fully compiled code Embeddable code (no runtime dependences, constant memory and CPU footprint) Easy deployment : single code multiple targets (from VST plugins to iPhone or standalone applications)

slide-25
SLIDE 25

Introduction

Main caracteristics

FAUST is based on several design principles:

High-level Specification language Purely functional approach Textual, block-diagram oriented, syntax Efficient sample level processing Fully compiled code Embeddable code (no runtime dependences, constant memory and CPU footprint) Easy deployment : single code multiple targets (from VST plugins to iPhone or standalone applications)

slide-26
SLIDE 26

Introduction

Main caracteristics

FAUST is based on several design principles:

High-level Specification language Purely functional approach Textual, block-diagram oriented, syntax Efficient sample level processing Fully compiled code Embeddable code (no runtime dependences, constant memory and CPU footprint) Easy deployment : single code multiple targets (from VST plugins to iPhone or standalone applications)

slide-27
SLIDE 27

Introduction

Main caracteristics

FAUST is based on several design principles:

High-level Specification language Purely functional approach Textual, block-diagram oriented, syntax Efficient sample level processing Fully compiled code Embeddable code (no runtime dependences, constant memory and CPU footprint) Easy deployment : single code multiple targets (from VST plugins to iPhone or standalone applications)

slide-28
SLIDE 28

Introduction

Main caracteristics

FAUST is based on several design principles:

High-level Specification language Purely functional approach Textual, block-diagram oriented, syntax Efficient sample level processing Fully compiled code Embeddable code (no runtime dependences, constant memory and CPU footprint) Easy deployment : single code multiple targets (from VST plugins to iPhone or standalone applications)

slide-29
SLIDE 29

2-Block Diagram Algebra

slide-30
SLIDE 30

Block-Diagram Algebra

Programming by patching is familiar to musicians :

slide-31
SLIDE 31

Block-Diagram Algebra

Today programming by patching is widely used in Visual Programming Languages like Max/MSP:

Figure: Block-diagrams can be a mess

slide-32
SLIDE 32

Block-Diagram Algebra

Faust allows structured block-diagrams

allpass_combs(8) feedbackmatrix(8) delayfilters(...1, 8, 0.1)))) fbdelaylines(8) zita_rev_fdn(...1, 8, 0.1))))(48000)

Figure: A complex but structured block-diagram

slide-33
SLIDE 33

Block-Diagram Algebra

Faust syntax is based on a block diagram algebra

5 Composition Operators

(A,B) parallel composition (A:B) sequential composition (A<:B) split composition (A:>B) merge composition (A~B) recursive composition

2 Constants

! cut _ wire

slide-34
SLIDE 34

Block-Diagram Algebra

Parallel Composition

The parallel composition (A, B) is probably the simplest one. It places the two block-diagrams one on top of the other, without connections.

Figure: Example of parallel composition (10,*)

slide-35
SLIDE 35

Block-Diagram Algebra

Sequential Composition

The sequential composition (A : B) connects the outputs of A to the inputs of B. A[0] is connected to [0]B, A[1] is connected to [1]B, and so on.

Figure: Example of sequential composition ((*,/):+)

slide-36
SLIDE 36

Block-Diagram Algebra

Split Composition

The split composition (A <: B) operator is used to distribute A

  • utputs to B inputs.

Figure: example of split composition ((10,20) <: (+,*,/))

slide-37
SLIDE 37

Block-Diagram Algebra

Merge Composition

The merge composition (A :> B) is used to connect several

  • utputs of A to the same inputs of B.

Figure: example of merge composition ((10,20,30,40) :> *)

slide-38
SLIDE 38

Block-Diagram Algebra

Recursive Composition

The recursive composition (A~B) is used to create cycles in the block-diagram in order to express recursive computations.

Figure: example of recursive composition +(12345) ~ *(1103515245)

slide-39
SLIDE 39

3-Some examples

slide-40
SLIDE 40

Block-Diagram Algebra

Example 1

Noise Generator

random = +(12345)~*(1103515245); noise = random /2147483647.0; process = noise * vslider("vol", 0, 0, 1, 0.1);

slide-41
SLIDE 41

Block-Diagram Algebra

Example 2

Stereo Pan

p = hslider("pan", 0.5, 0, 1, 0.01); process = _ <: *( sqrt (1 - p)), *( sqrt(p));

slide-42
SLIDE 42

4-Demo

slide-43
SLIDE 43

5-Compiler/Code Generation

slide-44
SLIDE 44

FAUST Compiler

Main Phases of the compiler

Faust Program evaluation Block-Diagram in Normal Form symbolic propagation Signal Equations normalization Signal Equations in Normal Form type inference Typed Signals code generation Implementation Code (C++)

slide-45
SLIDE 45

FAUST Compiler

Four Code generation modes scalar code generator vector code generator (loop separation)

parallel code generator (OpenMP directives) parallel code generator (Work Stealing Scheduler)

slide-46
SLIDE 46

Performance of the generated code

How the C++ code generated by FAUST compares with hand written C++ code ?

STK vs FAUST (CPU load)

File name STK FAUST Difference blowBottle.dsp 3,23 2,49

  • 22%

blowHole.dsp 2,70 1,75

  • 35%

bowed.dsp 2,78 2,28

  • 17%

brass.dsp 10,15 2,01

  • 80%

clarinet.dsp 2,26 1,19

  • 47%

flutestk.dsp 2,16 1,13

  • 47%

saxophony.dsp 2,38 1,47

  • 38%

sitar.dsp 1,59 1,11

  • 30%

tibetanBowl.dsp 5,74 2,87

  • 50%

Overall improvement of about 41 % in favor of FAUST.

slide-47
SLIDE 47

Performance of the generated code

How the C++ code generated by FAUST compares with hand written C++ code ?

STK vs FAUST (CPU load)

File name STK FAUST Difference blowBottle.dsp 3,23 2,49

  • 22%

blowHole.dsp 2,70 1,75

  • 35%

bowed.dsp 2,78 2,28

  • 17%

brass.dsp 10,15 2,01

  • 80%

clarinet.dsp 2,26 1,19

  • 47%

flutestk.dsp 2,16 1,13

  • 47%

saxophony.dsp 2,38 1,47

  • 38%

sitar.dsp 1,59 1,11

  • 30%

tibetanBowl.dsp 5,74 2,87

  • 50%

Overall improvement of about 41 % in favor of FAUST.

slide-48
SLIDE 48

Performance of the generated code

What improvements to expect from parallelized code ?

Sonik Cube

Audio-visual installation involving a cube of light, reacting to sounds, immersed in an audio feedback room (Trafik/Orlarey 2006).

slide-49
SLIDE 49

Performance of the generated code

What improvements to expect from parallelized code ?

Sonik Cube

8 loudspeakers 6 microphones audio software, written in FAUST, controlling the audio feedbacks and the sound spatialization.

slide-50
SLIDE 50

Performance of the generated code

What improvements to expect from parallelized code ?

Sonik Cube

Compared performances of the various C++ code generation strategies according to the number of cores :

1 2 3 4 5 6 7 8 20 40 60 80 100 120 140 160 180

Sonik Cube

Mac Pro 8, Faust 0.9.20, icc 11.1.069

  • mp

sch scal vec number of cores

slide-51
SLIDE 51

6-Automatic documentation

slide-52
SLIDE 52

Automatic Mathematical Documentation

Motivations et Principles

Binary and source code preservation of programs is not enough : quick obsolescence of languages, systems and hardware. We need to preserve the mathematical meaning of these programs independetly of any programming language. The solution is to generate automatically the mathematical description of any Faust program

slide-53
SLIDE 53

Automatic Mathematical Documentation

Motivations et Principles

Binary and source code preservation of programs is not enough : quick obsolescence of languages, systems and hardware. We need to preserve the mathematical meaning of these programs independetly of any programming language. The solution is to generate automatically the mathematical description of any Faust program

slide-54
SLIDE 54

Automatic Mathematical Documentation

Motivations et Principles

Binary and source code preservation of programs is not enough : quick obsolescence of languages, systems and hardware. We need to preserve the mathematical meaning of these programs independetly of any programming language. The solution is to generate automatically the mathematical description of any Faust program

slide-55
SLIDE 55

Automatic Mathematical Documentation

Motivations et Principles

Binary and source code preservation of programs is not enough : quick obsolescence of languages, systems and hardware. We need to preserve the mathematical meaning of these programs independetly of any programming language. The solution is to generate automatically the mathematical description of any Faust program

slide-56
SLIDE 56

Automatic Mathematical Documentation

Tools provided

The easiest way to generate the complete mathematical documentation is to call the faust2mathdoc script on a Faust file. This script relies on a new option of the Faust compile :

  • mdoc

faust2mathdoc noise.dsp

slide-57
SLIDE 57

Automatic Mathematical Documentation

Tools provided

The easiest way to generate the complete mathematical documentation is to call the faust2mathdoc script on a Faust file. This script relies on a new option of the Faust compile :

  • mdoc

faust2mathdoc noise.dsp

slide-58
SLIDE 58

Automatic Mathematical Documentation

Tools provided

The easiest way to generate the complete mathematical documentation is to call the faust2mathdoc script on a Faust file. This script relies on a new option of the Faust compile :

  • mdoc

faust2mathdoc noise.dsp

slide-59
SLIDE 59

Automatic Mathematical Documentation

Tools provided

The easiest way to generate the complete mathematical documentation is to call the faust2mathdoc script on a Faust file. This script relies on a new option of the Faust compile :

  • mdoc

faust2mathdoc noise.dsp

slide-60
SLIDE 60

Automatic Mathematical Documentation

Files generated by Faust2mathdoc noise.dsp

noise-mdoc/ cpp/

⋄ noise.cpp

pdf/

⋄ noise.pdf

src/

⋄ math.lib ⋄ music.lib ⋄ noise.dsp

svg/

⋄ process.pdf ⋄ process.svg

tex/

⋄ noise.pdf ⋄ noise.tex

slide-61
SLIDE 61

7-Architectures

slide-62
SLIDE 62

Faust Architecture System

Motivations

Easy deployment (one Faust code, multiple audio targets) is an essential feature of the Faust project This is why Faust programs say nothing about audio drivers or GUI toolkits to be used. There is a separation of concerns between the audio computation itself, and its usage.

slide-63
SLIDE 63

Faust Architecture System

Motivations

Easy deployment (one Faust code, multiple audio targets) is an essential feature of the Faust project This is why Faust programs say nothing about audio drivers or GUI toolkits to be used. There is a separation of concerns between the audio computation itself, and its usage.

slide-64
SLIDE 64

Faust Architecture System

Motivations

Easy deployment (one Faust code, multiple audio targets) is an essential feature of the Faust project This is why Faust programs say nothing about audio drivers or GUI toolkits to be used. There is a separation of concerns between the audio computation itself, and its usage.

slide-65
SLIDE 65

Faust Architecture System

Motivations

Easy deployment (one Faust code, multiple audio targets) is an essential feature of the Faust project This is why Faust programs say nothing about audio drivers or GUI toolkits to be used. There is a separation of concerns between the audio computation itself, and its usage.

slide-66
SLIDE 66

Faust Architecture System

The architecture file describes how to connect the audio computation to the external world.

DSP code User Interface Module Audio Driver Module User Interface Module Audio Driver Module DSP code

slide-67
SLIDE 67

Faust Architecture System

Examples of supported architectures

Audio plugins :

◮ LADSPA ◮ DSSI ◮ Max/MSP ◮ VST ◮ PD ◮ CSound ◮ Supercollider ◮ Pure ◮ Chuck ◮ Octave ◮ Flash

Standalone audio applications :

◮ Jack ◮ Alsa ◮ CoreAudio ◮ iPhone

slide-68
SLIDE 68

8-Multirate extension

slide-69
SLIDE 69

Extensions

What is currently missing in Faust

Applications that we can’t address :

◮ oversampling, upsampling, downsampling ◮ spectral processing ◮ video processing

What we need :

◮ multirate signals ◮ multidimension signals

slide-70
SLIDE 70

Extensions

What is currently missing in Faust

Applications that we can’t address :

◮ oversampling, upsampling, downsampling ◮ spectral processing ◮ video processing

What we need :

◮ multirate signals ◮ multidimension signals

slide-71
SLIDE 71

Extensions

What is currently missing in Faust

Applications that we can’t address :

◮ oversampling, upsampling, downsampling ◮ spectral processing ◮ video processing

What we need :

◮ multirate signals ◮ multidimension signals

slide-72
SLIDE 72

Extensions

What is currently missing in Faust

Applications that we can’t address :

◮ oversampling, upsampling, downsampling ◮ spectral processing ◮ video processing

What we need :

◮ multirate signals ◮ multidimension signals

slide-73
SLIDE 73

Extensions

What is currently missing in Faust

Applications that we can’t address :

◮ oversampling, upsampling, downsampling ◮ spectral processing ◮ video processing

What we need :

◮ multirate signals ◮ multidimension signals

slide-74
SLIDE 74

Extensions

What is currently missing in Faust

Applications that we can’t address :

◮ oversampling, upsampling, downsampling ◮ spectral processing ◮ video processing

What we need :

◮ multirate signals ◮ multidimension signals

slide-75
SLIDE 75

Extensions

What is currently missing in Faust

Applications that we can’t address :

◮ oversampling, upsampling, downsampling ◮ spectral processing ◮ video processing

What we need :

◮ multirate signals ◮ multidimension signals

slide-76
SLIDE 76

Extensions

What is currently missing in Faust

Applications that we can’t address :

◮ oversampling, upsampling, downsampling ◮ spectral processing ◮ video processing

What we need :

◮ multirate signals ◮ multidimension signals

slide-77
SLIDE 77

Extensions

What we propose

Minimal extension with 4 new primitives

◮ Vectorize ◮ Serialize ◮ Concat ◮ Access

Only Vectorize and Serialize change rates (but keep the flow constant). All other operations assume arguments at the same rate All numerical operations extended to vectors, vectors of vectors, etc.

slide-78
SLIDE 78

Extensions

What we propose

Minimal extension with 4 new primitives

◮ Vectorize ◮ Serialize ◮ Concat ◮ Access

Only Vectorize and Serialize change rates (but keep the flow constant). All other operations assume arguments at the same rate All numerical operations extended to vectors, vectors of vectors, etc.

slide-79
SLIDE 79

Extensions

What we propose

Minimal extension with 4 new primitives

◮ Vectorize ◮ Serialize ◮ Concat ◮ Access

Only Vectorize and Serialize change rates (but keep the flow constant). All other operations assume arguments at the same rate All numerical operations extended to vectors, vectors of vectors, etc.

slide-80
SLIDE 80

Extensions

What we propose

Minimal extension with 4 new primitives

◮ Vectorize ◮ Serialize ◮ Concat ◮ Access

Only Vectorize and Serialize change rates (but keep the flow constant). All other operations assume arguments at the same rate All numerical operations extended to vectors, vectors of vectors, etc.

slide-81
SLIDE 81

Extensions

What we propose

Minimal extension with 4 new primitives

◮ Vectorize ◮ Serialize ◮ Concat ◮ Access

Only Vectorize and Serialize change rates (but keep the flow constant). All other operations assume arguments at the same rate All numerical operations extended to vectors, vectors of vectors, etc.

slide-82
SLIDE 82

Extensions

What we propose

Minimal extension with 4 new primitives

◮ Vectorize ◮ Serialize ◮ Concat ◮ Access

Only Vectorize and Serialize change rates (but keep the flow constant). All other operations assume arguments at the same rate All numerical operations extended to vectors, vectors of vectors, etc.

slide-83
SLIDE 83

Extensions

What we propose

Minimal extension with 4 new primitives

◮ Vectorize ◮ Serialize ◮ Concat ◮ Access

Only Vectorize and Serialize change rates (but keep the flow constant). All other operations assume arguments at the same rate All numerical operations extended to vectors, vectors of vectors, etc.

slide-84
SLIDE 84

Extensions

What we propose

Minimal extension with 4 new primitives

◮ Vectorize ◮ Serialize ◮ Concat ◮ Access

Only Vectorize and Serialize change rates (but keep the flow constant). All other operations assume arguments at the same rate All numerical operations extended to vectors, vectors of vectors, etc.

slide-85
SLIDE 85

Extensions

What we propose

Minimal extension with 4 new primitives

◮ Vectorize ◮ Serialize ◮ Concat ◮ Access

Only Vectorize and Serialize change rates (but keep the flow constant). All other operations assume arguments at the same rate All numerical operations extended to vectors, vectors of vectors, etc.

slide-86
SLIDE 86

Extensions

Vectorize

9 8 7 6 5 4 3 2 1 7 8 9 4 5 6 1 2 3

vectorize(3)

vectorize : T r × n → [n]T r/n

slide-87
SLIDE 87

Extensions

Serialize

9 8 7 6 5 4 3 2 1 7 8 9 4 5 6 1 2 3

serialize

serialize : [n]T r/n → T r

slide-88
SLIDE 88

Extensions

Access [ ]

G H I D E F A B C 1 2 H D C

access : [n]T r × N[0..n]r → T r

slide-89
SLIDE 89

Extensions

Concat

7 8 9 4 5 6 1 2 3

#

7 8 9 4 5 6 1 2 3 E F C D A B E F C D A B

# : [n]T r × [m]T r → [n + m]T r

slide-90
SLIDE 90

Extensions

Simple examples

Some very simple examples involving the multirate extension. upsampling : up2 = vectorize(1) <: # : serialize; downsampling : down2 = vectorize(2) : [0]; sliding window : slide(n) = vectorize(n) <: @(1),_ : #;

slide-91
SLIDE 91

Extensions

Simple examples

Some very simple examples involving the multirate extension. upsampling : up2 = vectorize(1) <: # : serialize; downsampling : down2 = vectorize(2) : [0]; sliding window : slide(n) = vectorize(n) <: @(1),_ : #;

slide-92
SLIDE 92

Extensions

Simple examples

Some very simple examples involving the multirate extension. upsampling : up2 = vectorize(1) <: # : serialize; downsampling : down2 = vectorize(2) : [0]; sliding window : slide(n) = vectorize(n) <: @(1),_ : #;

slide-93
SLIDE 93

Extensions

Simple examples

Some very simple examples involving the multirate extension. upsampling : up2 = vectorize(1) <: # : serialize; downsampling : down2 = vectorize(2) : [0]; sliding window : slide(n) = vectorize(n) <: @(1),_ : #;

slide-94
SLIDE 94

9-Resources

slide-95
SLIDE 95

Resources

FAUST Distribution on Sourceforge http://sourceforge.net/projects/faudiostream/ git clone git://faudiostream.git.sourceforge.net/gitroot/faudiostream/faudiostream faust cd faust; make; sudo make install

slide-96
SLIDE 96

Resources

FAUST Distribution on Sourceforge http://sourceforge.net/projects/faudiostream/ git clone git://faudiostream.git.sourceforge.net/gitroot/faudiostream/faudiostream faust cd faust; make; sudo make install

slide-97
SLIDE 97

Resources

FAUST Distribution on Sourceforge http://sourceforge.net/projects/faudiostream/ git clone git://faudiostream.git.sourceforge.net/gitroot/faudiostream/faudiostream faust cd faust; make; sudo make install

slide-98
SLIDE 98

Resources

FAUST Distribution on Sourceforge http://sourceforge.net/projects/faudiostream/ git clone git://faudiostream.git.sourceforge.net/gitroot/faudiostream/faudiostream faust cd faust; make; sudo make install

slide-99
SLIDE 99

Resources

FaustWorks IDE on Sourceforge http://sourceforge.net/projects/faudiostream/files/ FaustWorks-0.3.2.tgz/download git clone git://faudiostream.git.sourceforge.net/gitroot/faudiostream/FaustWorks cd FaustWorks; qmake; make

slide-100
SLIDE 100

Resources

FaustWorks IDE on Sourceforge http://sourceforge.net/projects/faudiostream/files/ FaustWorks-0.3.2.tgz/download git clone git://faudiostream.git.sourceforge.net/gitroot/faudiostream/FaustWorks cd FaustWorks; qmake; make

slide-101
SLIDE 101

Resources

FaustWorks IDE on Sourceforge http://sourceforge.net/projects/faudiostream/files/ FaustWorks-0.3.2.tgz/download git clone git://faudiostream.git.sourceforge.net/gitroot/faudiostream/FaustWorks cd FaustWorks; qmake; make

slide-102
SLIDE 102

Resources

FaustWorks IDE on Sourceforge http://sourceforge.net/projects/faudiostream/files/ FaustWorks-0.3.2.tgz/download git clone git://faudiostream.git.sourceforge.net/gitroot/faudiostream/FaustWorks cd FaustWorks; qmake; make

slide-103
SLIDE 103

Resources

Using FAUST Online Compiler http://faust.grame.fr No installation required Compile to C++ as well as binary (for Linux and Windows)

slide-104
SLIDE 104

Resources

Using FAUST Online Compiler http://faust.grame.fr No installation required Compile to C++ as well as binary (for Linux and Windows)

slide-105
SLIDE 105

Resources

Using FAUST Online Compiler http://faust.grame.fr No installation required Compile to C++ as well as binary (for Linux and Windows)

slide-106
SLIDE 106

Resources

Using FAUST Online Compiler http://faust.grame.fr No installation required Compile to C++ as well as binary (for Linux and Windows)

slide-107
SLIDE 107

Resources

FAUST Quick Reference

Figure: Faust Quick Reference, Grame

slide-108
SLIDE 108

Resources

Some research papers

2004 : Syntactical and semantical aspects of Faust, Orlarey, Y. and Fober, D. and Letz, S., in Soft Computing, vol 8(9), p623-632, Springer. 2009 : Parallelization of Audio Applications with Faust, Orlarey, Y. and Fober, D. and Letz, S., in Proceedings of the SMC 2009-6th Sound and Music Computing Conference, 2011 : Dependent vector types for data structuring in multirate Faust, Jouvelot, P. and Orlarey, Y., in Computer Languages, Systems & Structures, Elsevier

slide-109
SLIDE 109

10-Acknowledgments

slide-110
SLIDE 110

Acknowledgments

OS Community

Fons Adriaensen, Thomas Charbonnel, Albert Gr¨ af, Stefan Kersten, Victor Lazzarini, Kjetil Matheussen, R´ emy Muller, Romain Michon, Stephen Sinclair, Travis Skare, Julius Smith

Sponsors

French Ministry of Culture, Rhˆ

  • ne-Alpes Region, City of Lyon, National Research

Agency

Partners from the Astree project (ANR 2008 CORD 003 02)

J´ erˆ

  • me Barth´

elemy (Ircam), Karim Barkati (Ircam), Alain Bonardi (Ircam), Raffaele Ciavarella (Ircam), Pierre Jouvelot (Mines/ParisTech), Laurent Pottier (U. Saint-Etienne)

Former Students

Tiziano Bole, Damien Cramet, ´ Etienne Gaudrin, Matthieu Leberre, Mathieu Leroi, Nicolas Scaringella