File: felix2.dsp

package info (click to toggle)
faust 2.30.5~ds0-2
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 279,348 kB
  • sloc: cpp: 239,368; javascript: 32,310; ansic: 17,442; sh: 11,925; java: 5,903; objc: 3,879; makefile: 3,030; cs: 1,139; python: 987; ruby: 951; xml: 693; yacc: 537; lex: 239; lisp: 201; awk: 110
file content (61 lines) | stat: -rw-r--r-- 1,804 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
/*
Beamforming - Prototype
*/

import("music.lib");

nquads = 6; // amount of quadrants on 1 axis
roomsize = 2.0; // x*x meters
nmics = 6; // amount of microfones

// delay with offset, to avoid negative delays
//delayl(n) = fdelay(512, n+256);
delayl(n) = delay(512, n+256); // without interpolation

// x-axis of mic(n) (depends on arrangement of mics)
mic(n) = 0.1*n-0.1;

// vectornorm
vabs(x,y) = sqrt(x*x+y*y);

// subtraction of vectors
vsub(x1,y1,x2,y2) = (x1-x2) , (y1-y2);

// index to meters (x/y-axis):
// index = 0...nquads
i2x(x) = (x/nquads)*roomsize-(roomsize*0.5);
i2y(y) = (y/nquads)*roomsize;

// Laufzeit L(x1,y1,x2,y2): time from point (x1,y1) to (x2,y2)
// Betrag(Vektorsubtraktion(M-P)) / 343 m/s * 44100 /s -> also in Samples
stime(mx,my,px,py) = vsub(mx,my,i2x(px),i2y(py)):vabs / 343 * 44100;

// Laufzeitdifferenz Ld(mic):
// m is the mic-number; Ld(mic) = L(mic(0)) - L(mic(m)); mic(m) computes only x-axis
dtime(x, y, m) = stime(mic(0),-0.5,x,y)-stime(mic(m),-0.5,x,y);

// create delays (x,y): index of coordinates of the focused point, m:microfonnumber
delayer(x, y, m) = delayl(dtime(x, y, m));

// add delays
add(x) = seq(i, x-2, +,par(j,x-2-i,_)) : +;
//beamer(x, y) = par(i, nmics, delayer(x, y, i)):seq(j,nmics-1,+);
beamer(x, y) = par(i, nmics, delayer(x, y, i)) : add(nmics);

audioin = par(i,nmics,_);

// spread audioins to beamformers
beamform = audioin<:par(x, nquads, par(y, nquads, beamer(x, y)));

// sehr ineffizient wegen dem log10 -> mal mit icc probieren
// env = abs : max(db2linear(-96)) : linear2db : min(10)  : max ~ -(96.0/SR);
env = abs : max ~ -(96.0/SR);

envs = par(i,nquads*nquads,env);

gui = par(x, nquads, hgroup("ctrl %3d",
  par(y, nquads, vbargraph("ctrl %2c", 0, 1) with { c=x*10+y; })) with { d=x;});

process = beamform : envs : gui;