@grame/faustwasm 0.0.42 → 0.0.43

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@grame/faustwasm",
3
- "version": "0.0.42",
3
+ "version": "0.0.43",
4
4
  "description": "WebAssembly version of Faust Compiler",
5
5
  "main": "dist/cjs/index.js",
6
6
  "types": "dist/esm/index.d.ts",
@@ -26,6 +26,11 @@
26
26
  "audio",
27
27
  "signal processing"
28
28
  ],
29
+ "bin": {
30
+ "faust2sndfile": "scripts/faust2sndfile.js",
31
+ "faust2svg": "scripts/faust2svg.js",
32
+ "faust2wasm": "scripts/faust2wasm.js"
33
+ },
29
34
  "author": "Grame-CNCM",
30
35
  "license": "LGPL-3.0",
31
36
  "bugs": {
@@ -1,630 +0,0 @@
1
- declare name "WKR Compost Library";
2
- declare author "Luca Spanedda";
3
- declare author "Dario Sanfilippo";
4
- declare version "1.0";
5
- declare description "2023";
6
- declare copyright "Copyright (C) 2023 Luca Spanedda <lucaspanedda1995@gmail.com>";
7
- declare license "MIT license";
8
- // Import the standard Faust Libraries
9
- import("stdfaust.lib");
10
- // Import Lists
11
- primes = component("prime_numbers.dsp").primes;
12
- primesThousands = component("prime_numbers.dsp").primesThousands;
13
-
14
-
15
- /************************************************************************
16
- ************************************************************************
17
- - BASIC -
18
- ************************************************************************
19
- ************************************************************************/
20
-
21
-
22
- // constants values
23
- PI = ma.PI;
24
- TWOPI = 2.0 * PI;
25
- SR = ma.SR;
26
- EPS = ma.EPSILON;
27
- NY = SR / 2.0;
28
- T = 1.0 / SR;
29
- PIT = PI * T;
30
- TWOPIT = TWOPI * T;
31
- MS2T(t) = (t / 1000) * ma.SR;
32
-
33
- // limit function for library and system
34
- limit(maxl, minl, x) = max(minl, min(maxl, x));
35
-
36
- info(i, lower, upper) =
37
- _ <: _, vbargraph(" %i [style:numerical]", lower, upper) : attach;
38
- infoScale(i, lower, upper) =
39
- _ <: _, (_ * 1000 : vbargraph(" %i [style:numerical]", lower * 1000, upper * 1000)) : attach;
40
-
41
- // binary selector 0 - 1
42
- selector(sel, x, y) = ( x * (1 - sel) + y * (sel) );
43
-
44
- // index of the primes numbers
45
- primeNumbers(index) = ba.take(index , list)
46
- with{
47
- list = primes;
48
- };
49
-
50
-
51
- /************************************************************************
52
- ************************************************************************
53
- - MAPPING -
54
- ************************************************************************
55
- ************************************************************************/
56
-
57
- // bipolar -1/+1 to unipolar 0/1
58
- biToUni(x) = (x + 1) / 2;
59
-
60
- // accept 0/1
61
- map(minL, maxL, x) = x * (maxL - minL) + minL;
62
-
63
-
64
- /************************************************************************
65
- ************************************************************************
66
- - SIGNALS GENERATION -
67
- ************************************************************************
68
- ************************************************************************/
69
-
70
- // pseudo-random noise with linear congruential generator (LCG)
71
- noise(initSeed) = LCG ~ _ : (_ / m)
72
- with{
73
- // initSeed = an initial seed value
74
- a = 18446744073709551557; // a large prime number,
75
- // such as 18446744073709551557
76
- c = 12345; // a small prime number, such as 12345
77
- m = 2 ^ 31; // 2.1 billion
78
- // linear_congruential_generator
79
- LCG(seed) = ((a * seed + c) + (initSeed - initSeed') % m);
80
- };
81
-
82
- multinoise(N) = par(i, N, noise(ba.take(i + 1, primes)));
83
-
84
- // Letrec Phasor
85
- phasorLetrec(f) = Xn
86
- letrec{
87
- 'Xn = (Xn + (f / ma.SR)) : frac;
88
- }
89
- with{
90
- frac(x) = x-floor(x);
91
- };
92
-
93
-
94
- /************************************************************************
95
- ************************************************************************
96
- - FILTERS -
97
- ************************************************************************
98
- ************************************************************************/
99
-
100
- //--------------------------------------------- ONEZERO FILTER (FIR of I° Order)
101
- // (g) = give amplitude 0-1(open-close) to the delayed signal
102
- // (g) = +1 lowpass, (g) = -1 highpass
103
- ozf(g, x) = (x' * g), x :> +;
104
-
105
- //--------------------------------------- ONEPOLE FILTER (IIR of 1 sample delay)
106
- // only the pole section
107
- pole(g) = + ~ * (g);
108
-
109
- //--------------------------------------------------------------- ALLPASS FILTER
110
- // (t, g) = give: delay in samples, feedback gain 0-1
111
- apf(del, g, x) = x : (+ : _ <: @(del - 1), *(g))~ *(-g) : mem, _ : + : _;
112
-
113
- // APF Time Variant
114
- sdelay(maxDelay, interpolationLen, delayLen, x) =
115
- loop ~ si.bus(4) : (! , ! , ! , ! , _)
116
- with {
117
- loop(lineState, incrState, lowerDelayState, upperDelayState) =
118
- line , incr , lowerDelay , upperDelay , output
119
- with {
120
- lowerReach = lineState == 0;
121
- upperReach = lineState == 1;
122
- lowerDelayChange = delayLen != lowerDelayState;
123
- upperDelayChange = delayLen != upperDelayState;
124
- incr = ba.if( upperReach & upperDelayChange,
125
- -1.0 / interpolationLen,
126
- ba.if( lowerReach & lowerDelayChange),
127
- 1.0 / interpolationLen,
128
- incrState);
129
- line = max(.0, min(1.0, lineState + incr));
130
- lowerDelay = ba.if(upperReach, delayLen, lowerDelayState);
131
- upperDelay = ba.if(lowerReach, delayLen, upperDelayState);
132
- lowerDelayline = de.delay(maxDelay, lowerDelay, x) * (1.0 - line);
133
- upperDelayline = de.delay(maxDelay, upperDelay, x) * line;
134
- output = lowerDelayline + upperDelayline;
135
- };
136
- };
137
-
138
- allpassWerner(maxDel, intTime, del, g, x) = (loop : sdelay(maxDel, intTime, del - 1)) ~ _ : mem * D_g + x * g
139
- with {
140
- D_g = sqrt(1 - g * g);
141
- loop(fb) = x * D_g - g * fb;
142
- };
143
-
144
- AllpassWernerCascade(M, maxDel, intTime, d, g, x) = x : seq(i, M, allpassWerner(maxDel, intTime, d * (sqrt((i + 1) / M) - sqrt(i / M)), g));
145
-
146
-
147
- //---------------------------------------------------------------------- SVF TPT
148
- // SVFTPT filter function
149
- // TPT version of the SVF Filter by Vadim Zavalishin
150
- // reference : (by Will Pirkle)
151
- // http://www.willpirkle.com/Downloads/AN-4VirtualAnalogFilters.2.0.pdf
152
- SVFTPT(Q, cf, x) = loop ~ si.bus(2) : (! , ! , _ , _ , _ , _ , _)
153
- with {
154
- g = tan(cf * ma.PI * ma.T);
155
- R = 1.0 / (2.0 * Q);
156
- G1 = 1.0 / (1.0 + 2.0 * R * g + g * g);
157
- G2 = 2.0 * R + g;
158
- loop(s1, s2) = u1 , u2 , lp , hp , bp * 2.0 * R , x - bp * 4.0 * R , bp
159
- with {
160
- hp = (x - s1 * G2 - s2) * G1;
161
- v1 = hp * g;
162
- bp = s1 + v1;
163
- v2 = bp * g;
164
- lp = s2 + v2;
165
- u1 = v1 + bp;
166
- u2 = v2 + lp;
167
- };
168
- };
169
-
170
- LPSVF(Q, cf, x) = SVFTPT(Q, cf, x) : (_ , ! , ! , ! , !);
171
-
172
- HPSVF(Q, cf, x) = SVFTPT(Q, cf, x) : (! , _ , ! , ! , !);
173
-
174
- BPSVF(Q, cf, x) = SVFTPT(Q, limit(20000, 20, cf), x) : (! , ! , _ , ! , !);
175
-
176
- NotchSVF(Q, cf, x) = x - BPSVF(Q, limit(20000, 20, cf), x);
177
-
178
- APSVF(Q, cf, x) = SVFTPT(Q, cf, x) : (! , ! , ! , _ , !);
179
-
180
- PeakingSVF(Q, cf, x) = LPSVF(Q, cf, x) - HPSVF(Q, cf, x);
181
-
182
- BP2SVF(Q, cf, x) = SVFTPT(Q, cf, x) : (! , ! , ! , ! , _);
183
-
184
- BPBWSVF(BW, CF, x) = BPSVF(limit(20000, minimum, (CF / BW)), CF, x);
185
-
186
- // Zavalishin's SVF BP FILTER
187
- // optimized BP from the TPT version of the SVF Filter by Vadim Zavalishin
188
- // reference : (by Will Pirkle)
189
- // http://www.willpirkle.com/Downloads/AN-4VirtualAnalogFilters.2.0.pdf
190
- BPSVFTPT(glin, bw, cf, x) = loop ~ si.bus(2) : (! , ! , _)
191
- with {
192
- g = tan(cf * ma.PI * (1.0/ma.SR));
193
- Q = cf / max(EPS, bw);
194
- R = 1.0 / (Q + Q);
195
- G = 1.0 / (1.0 + 2.0 * R * g + g * g);
196
- loop(s1, s2) = u1 , u2 , bp * glin
197
- with {
198
- bp = (g * (x - s2) + s1) * G;
199
- bp2 = bp + bp;
200
- v2 = bp2 * g;
201
- u1 = bp2 - s1;
202
- u2 = v2 + s2;
203
- };
204
- };
205
-
206
- //------------------------------------------------------------------ ONEPOLE TPT
207
- // Zavalishin Onepole TPT Filter
208
- // TPT version of the One-Pole Filter by Vadim Zavalishin
209
- // reference : (by Will Pirkle)
210
- // http://www.willpirkle.com/Downloads/AN-4VirtualAnalogFilters.2.0.pdf
211
- onePoleTPT(cf, x) = loop ~ _ : ! , si.bus(3)
212
- with {
213
- g = tan(cf * ma.PI * ma.T);
214
- G = g / (1.0 + g);
215
- loop(s) = u , lp , hp , ap
216
- with {
217
- v = (x - s) * G; u = v + lp; lp = v + s; hp = x - lp; ap = lp - hp;
218
- };
219
- };
220
-
221
- // Lowpass TPT
222
- LPTPT(cf, x) = onePoleTPT(cf, x) : (_ , ! , !);
223
-
224
- // Highpass TPT
225
- HPTPT(cf, x) = onePoleTPT(cf, x) : (! , _ , !);
226
-
227
- // Allpass TPT
228
- APTPT(cf, x) = onePoleTPT(cf, x) : (!, !, _);
229
-
230
- //-------------------------------------------------------------- BUTTERWORTH ---
231
- butterworthQ(order, stage) = qFactor(order % 2)
232
- with {
233
- qFactor(0) = 1.0 / (2.0 * cos(((2.0 * stage + 1) *
234
- (ma.PI / (order * 2.0)))));
235
- qFactor(1) = 1.0 / (2.0 * cos(((stage + 1) * (ma.PI / order))));
236
- };
237
-
238
- LPButterworthN(1, cf, x) = LPTPT(cf, x);
239
- LPButterworthN(N, cf, x) = cascade(N % 2)
240
- with {
241
- cascade(0) = x : seq(i, N / 2, LPSVF(butterworthQ(N, i), cf));
242
- cascade(1) = x : LPTPT(cf) : seq(i, (N - 1) / 2,
243
- LPSVF(butterworthQ(N, i), cf));
244
- };
245
-
246
- HPButterworthN(1, cf, x) = HPTPT(cf, x);
247
- HPButterworthN(N, cf, x) = cascade(N % 2)
248
- with {
249
- cascade(0) = x : seq(i, N / 2, HPSVF(butterworthQ(N, i), cf));
250
- cascade(1) = x : HPTPT(cf) : seq(i, (N - 1) /
251
- 2, HPSVF(butterworthQ(N, i), cf));
252
- };
253
-
254
- //------------------------------------------------------------------- DC BLOCKER
255
- // https://ccrma.stanford.edu/~jos/fp/DC_Blocker.html
256
- dcblocker(ozfc, polefc, x) = x : ozf(ozfc) : pole(polefc);
257
-
258
-
259
- /************************************************************************
260
- ************************************************************************
261
- - AUDIO INFORMATION PROCESSING -
262
- ************************************************************************
263
- ************************************************************************/
264
-
265
- //----------------------------------------------------------------- MAX PEAK ---
266
- // references: 1, 2
267
- // Peak Max with IIR filter and max comparison
268
- peakmax(x) = loop ~_
269
- with{
270
- loop(y) = abs(x) , y : max;
271
- };
272
- //process = _ : peakmax;
273
-
274
- //--------------------------------------------------- MAX PEAK NORMALIZATION ---
275
- // references: 5
276
- // Peak Max Normalization
277
- fixedNorm(x) = 1 / (x : loop ~ _) * x
278
- with{
279
- loop(y,z) = ( (y, abs(z) ) : max);
280
- };
281
- //process = _ * .2 : fixedNorm;
282
-
283
- //--------------------------------------------------- PEAK ENVELOPE FOLLOWER ---
284
- peakenvelope(period, x) = loop ~ _
285
- with {
286
- loop(y) = max(abs(x), y * coeff);
287
- twoPIforT = (2.0 * ma.PI) * (1.0 / ma.SR);
288
- coeff = exp(-twoPIforT / max(EPS, period));
289
- };
290
-
291
- // Peak envelope. with attack and decay
292
- peakEnvAttRel(att, rel, x) = peakenvelope(rel - att, x) :
293
- LPTPT(1.0 / max(EPS, att));
294
-
295
- //----------------------------------------- MOVING AVERAGE ENVELOPE FOLLOWER ---
296
- movingAverage(seconds, x) = x - x@(seconds * ma.SR) :
297
- fi.pole(1.0) / (seconds * ma.SR);
298
- //process = _ * 10 : movingAverage(1);
299
-
300
- //------------------------------------------------------- MOVING AVERAGE RMS ---
301
- movingAverageRMS(seconds, x) = sqrt(max(0, movingAverage(seconds, x ^ 2)));
302
- //process = movingAverageRMS(1);
303
-
304
- //-------------------------------------------------------------- PEAK HOLDER ---
305
- // holdTime in Seconds
306
- peakHolder(holdTime, x) = loop ~ si.bus(2) : ! , _
307
- with {
308
- loop(timerState, outState) = timer , output
309
- with {
310
- isNewPeak = abs(x) >= outState;
311
- isTimeOut = timerState >= (holdTime * ma.SR - 1);
312
- bypass = isNewPeak | isTimeOut;
313
- timer = ba.if(bypass, 0, timerState + 1);
314
- output = ba.if(bypass, abs(x), outState);
315
- };
316
- };
317
-
318
-
319
- //----------------------------------------------- ATTACK DECAY - RMS AVERAGE ---
320
- // references: 3
321
- RMS(att, rel, x) = loop ~ _ : sqrt
322
- with {
323
- loop(y) = (1.0 - coeff) * x * x + coeff * y
324
- with {
325
- attCoeff = exp(-2.0 * ma.PI * ma.T / att);
326
- relCoeff = exp(-2.0 * ma.PI * ma.T / rel);
327
- coeff = ba.if(abs(x) > y, attCoeff, relCoeff);
328
- };
329
- };
330
-
331
-
332
- //--------------------------------------------------------- DYNAMIC LIMITERS ---
333
- // lookahead limiter with: peakHolder, lowpass & peakenvelope
334
- // All the credits of the original version goes to Dario Sanfilippo
335
- LookaheadLimiter(threshold, holdSec, decaySec, x) =
336
- (x : peakHolder(holdSec) : LPTPT(1/holdSec) : peakenvelope(decaySec)) :
337
- (min(1, threshold) / max(1, _)) *
338
- (x @ (holdSec * ma.SR));
339
-
340
- //------------------------------------------------------ DYNAMIC COMPRESSION ---
341
- dynamiComp(i, k, att, rel, exponent, x) =
342
- vgroup("dynaComp %i", (x * scaling) : hgroup("out %i", infoScale(k, -100, 100)))
343
- with {
344
- complement(x) = 1.0 - x;
345
- clipUni(x) = max(0.0, min(1.0, x));
346
- scaling = ma.tanh(x) : peakEnvAttRel(att, rel) :
347
- clipUni : complement : pow(exponent : hgroup("exp %i", infoScale(k, -100, 100)));
348
- };
349
-
350
-
351
- //------------------------------------------------------------ PITCH TRACKER ---
352
- // averaging function with 2pi time constant; t is the averaging time in seconds
353
- avg(t, x) = y
354
- letrec {
355
- 'y = x + alpha * (y - x);
356
- }
357
- with {
358
- alpha = exp((-2.0 * ma.PI * ma.T) / t);
359
- };
360
-
361
- // zero-crossing indicator function
362
- zeroCrossing(x) = (x * x') < 0;
363
-
364
- // zero-crossing rate
365
- zeroCrossingRate(t, x) = zeroCrossing(x) : avg(t);
366
-
367
- // pitch tracker as zero-crossing rate of self-regulating lowpassed inputs
368
- // we highpass the input to avoid infrasonic
369
- // components to affect the measurements
370
- // we then clip the lowpass cutoff to improve stability
371
- pitchTracker(t, x) = loop ~ _
372
- with {
373
- loop(y) = fi.lowpass(4, max(80, y), xHighpassed) :
374
- (zeroCrossingRate(t) * ma.SR * .5)
375
- with {
376
- xHighpassed = fi.highpass(1, 20, x);
377
- };
378
- };
379
-
380
- // Resonant Frequency Suppressor
381
- resonKill(bypass, T, Q, x) = out
382
- with{
383
- FC = pitchTracker(T, x);
384
- filter = x - BPSVF(Q, FC, x);
385
- out = filter * (1 - bypass) + x * bypass;
386
- };
387
-
388
-
389
- //---------------------------------------------------------------- LOCAL MAX ---
390
- localMax(seconds, x) = loop ~ si.bus(4) : _ , ! , ! , !
391
- with {
392
- loop(yState, timerState, peakState, timeInSamplesState) =
393
- y , timer , peak , timeInSamples
394
- with {
395
- timeInSamples = ba.if(reset + 1 - 1', limit(1000, 0, seconds) *
396
- ma.SR, timeInSamplesState);
397
- reset = timerState >= (timeInSamplesState - 1);
398
- timer = ba.if(reset, 1, timerState + 1);
399
- peak = max(abs(x), peakState * (1.0 - reset));
400
- y = ba.if(reset, peak', yState);
401
- };
402
- };
403
- // process = localMax(4);
404
-
405
- //---------------------------------------------------------- SAMPLE AND HOLD ---
406
- // SAH circuit
407
- SAH(ph, y) = \(FB).( selector( ph : \(x).(x < x'), FB, y ) )~ _ ;
408
-
409
-
410
- /************************************************************************
411
- ************************************************************************
412
- - READ & WRITE TABLES -
413
- ************************************************************************
414
- ************************************************************************/
415
-
416
- //-------------------------------------------- TIMESTRETCHING2 (OLA 2 HEADS) ---
417
- // Timestretcher - sum of the 2 Head Reads
418
- // Bufpos = 0 to 1 signals for the reads
419
- Stretcher(bufferMax, bufferSec, record, readSection, readOffset, readStretch, grainDims, i, jittin, freqShift, x) =
420
- x <: head1 + head2
421
- with{
422
- offset = 2;
423
- // tableMax = table Max Dimension - 10 Seconds
424
- tableMax = 192000 * bufferMax + offset;
425
- frac(x) = x-floor(x);
426
- // read section
427
- // stretchFactor - 0 Normal / 1 Extreme stretch (Freeze)
428
- stretch = phasorLetrec( (1/bufferSec) - readStretch)
429
- * readSection;
430
- // Jitter Amount in the position for the reads
431
- rnd = abs(noise((10667 * i) + 10667));
432
- jitter = jittin * rnd;
433
- // position in the Buffer for the Reads
434
- cntrlRead = (readOffset + stretch) - jitter : frac;
435
- // L = buffer dimension in seconds
436
- L = ma.SR * bufferSec;
437
- // Write index - ramp 0 to L
438
- wIdx = offset + ((+(1) : %(L)) ~ _) * record : int;
439
- // <: vgroup("Write", attach(_, _/L : hbargraph(" %i [style:numerical]",0,1)));
440
- buffer(p, x) = it.frwtable(3, tableMax, .0, wIdx, x, p);
441
- // Hanning window Equation
442
- hann(x) = sin(frac(x) * ma.PI) ^ 2.0;
443
- // Grain in Milliseconds
444
- grainms = 1 / grainDims : si.smoo;
445
- // Position of the grain in the Buffer
446
- bufPos = cntrlRead;
447
- // <: vgroup("Read", attach(_, _ : hbargraph(" %i [style:numerical]",0,1)));
448
- timePhase = offset + (bufPos * L);
449
- // two Heads for the read
450
- // 0°
451
- ph1 = phasorLetrec(grainms * freqShift);
452
- // 180*
453
- ph2 = ma.frac(.5 + ph1);
454
- // Buffer positions = Position in the Buffer + Grain Read
455
- pos1 = SAH(ph1, timePhase) + ph1*(ma.SR/grainms);
456
- pos2 = SAH(ph2, timePhase) + ph2*(ma.SR/grainms);
457
- // Windows + Buffer Reads
458
- head1 = hann(ph1) * buffer(pos1);
459
- head2 = hann(ph2) * buffer(pos2);
460
- };
461
-
462
-
463
- /************************************************************************
464
- ************************************************************************
465
- - NETWORKS -
466
- ************************************************************************
467
- ************************************************************************/
468
-
469
- //----------------------------------------------------- VECTORIAL OPERATIONS ---
470
- // perform operations on an arbitrary number of vectors
471
- vecOp(vectorsList, op) =
472
- vectorsList : seq(i, vecDim - 1, vecOp2D , vecBus(vecDim - 2 - i))
473
- with {
474
- vecBus(0) = par(i, vecLen, 0 : !);
475
- vecBus(dim) = par(i, dim, si.bus(vecLen));
476
- vecOp2D = ro.interleave(vecLen, 2) : par(i, vecLen, op);
477
- vecDim = outputs(vectorsList) / vecLen;
478
- vecLen = outputs(ba.take(1, vectorsList));
479
- };
480
-
481
- //----------------------------------------------------------------- MATRIXES ---
482
- // vector FDN Matrix
483
- vecMx(N, list) = si.bus(N) <: par(i, N, (vecOp((si.bus(N), list), *) :> +));
484
-
485
- vecMatrix(N) = si.bus(N) <: par(i, N, (vecOp((si.bus(N), list(i+1)), *) :> +))
486
- with{
487
- list(1) = 1, 0, 0, 0;
488
- list(2) = 0, 1, 0, 0;
489
- list(3) = 0, 0, 1, 0;
490
- list(4) = 0, 0, 0, 1;
491
- list(5) = 1, 0, 0, 0;
492
- list(6) = 0, 1, 0, 0;
493
- list(7) = 0, 0, 1, 0;
494
- list(8) = 0, 0, 0, 1;
495
- };
496
-
497
- // fully connected FDN Matrix
498
- fullyconnectedMx(N) = vecMx(N, par(i, N, 1));
499
- fullyconnectedMxNormalized(N) = vecMx(N, par(i, N, 1/N));
500
-
501
- // hadamard FDN Matrix
502
- butterfly(2) = si.bus(2) <: +, -;
503
- butterfly(N) = si.bus(N) <: ro.interleave(N/2,2), ro.interleave(N/2,2) : par(i, N/2, +), par(i, N/2, -);
504
- hadamard(2) = butterfly(2);
505
- hadamard(N) = butterfly(N) : (hadamard(N/2), hadamard(N/2));
506
-
507
- // Normalized hadamard FDN Matrix
508
- hadamardcoeff(N) = par(i, N, 1.0 / sqrt(N));
509
- hadamardNormalized(N) = vecOp((hadamard(N) , hadamardcoeff(N)), *);
510
-
511
- //----------------------------------------------------------------- NETWORKS ---
512
- FDNfullyconnected(N, D, G) = (vecOp((si.bus(N) , si.bus(N)), +) :
513
- vecOp((si.bus(N), par(i, N, D * ma.SR - 1)), @)) ~
514
- (fullyconnectedMxNormalized(N));
515
-
516
- FDNhadamard(N, D, G) = (vecOp((si.bus(N) , si.bus(N)), +) :
517
- vecOp((si.bus(N), par(i, N, D * ma.SR - 1)), @)) ~
518
- (hadamardNormalized(N));
519
-
520
- FDNsingleLoop(N, D, G) = (vecOp((si.bus(N) , si.bus(N)), +) :
521
- vecOp((si.bus(N), par(i, N, D * ma.SR - 1)), @)) ~ ro.crossNM(N-1, 1);
522
-
523
- FDNmatrix(N, D, G) = (vecOp((si.bus(N) , si.bus(N)), +) :
524
- vecOp((si.bus(N), par(i, N, D * ma.SR - 1)), @)) ~ (vectorMatrix(N))
525
- with{
526
- vectorMatrix(N) = si.bus(N) <:
527
- par(i, N, (vecOp((si.bus(N), list(i+1)), *) :> +))
528
- with{
529
- list(1) = 1, 0, 0, 0;
530
- list(2) = 0, 1, 0, 0;
531
- list(3) = 0, 0, 1, 0;
532
- list(4) = 0, 0, 0, 1;
533
- list(5) = 1, 0, 0, 0;
534
- list(6) = 0, 1, 0, 0;
535
- list(7) = 0, 0, 1, 0;
536
- list(8) = 0, 0, 0, 1;
537
- };
538
- };
539
-
540
-
541
- /************************************************************************
542
- ************************************************************************
543
- - NONLINEARITIES -
544
- ************************************************************************
545
- ************************************************************************/
546
-
547
- //----------------------------------------------------------- NONLINEARITIES ---
548
- controlSignalProcessing(i, k, exponent, responseTime, x) = vgroup("cntrlSig %i",
549
- xAverageSign * pow(abs(xAverageNormalisedSaturated) * .9, exponent) : hgroup("cntrl %i", infoScale(k, -1, 1)) :
550
- os.osc : hgroup("cntrl Osc %i", infoScale(k, -1, 1))
551
- : SAHDiffInvertion : si.smoo : hgroup("cntrl Sah %i", infoScale(k, -1, 1))
552
- )
553
- with {
554
- xAverage = x : seq(i, 4, LPTPT(1.0 / responseTime));
555
- xAverageRMS = xAverage * xAverage : seq(i, 4, LPTPT(1.0 / (10.0 * responseTime))) : sqrt;
556
- xAverageNormalised = xAverage / max(EPS, xAverageRMS);
557
- xAverageNormalisedSaturated = ma.tanh(xAverageNormalised);
558
- xAverageSign = ma.signum(xAverage);
559
- };
560
-
561
- //------------------------------------------------------- SAH DIFF INVERSION ---
562
- /* Sample-and-hold signals whose slope changes sign over a certain
563
- period/ */
564
- SAHDiffInvertion(x) = loop ~ _
565
- with {
566
- loop(y) = ba.if(nonZeroDiff * nonZeroDiff' < .0, x, y);
567
- nonZeroDiff = ba.sAndH(abs(diff(x)) > EPS, diff(x));
568
- diff(x) = x - x';
569
- };
570
-
571
- //----------------------------------------------------------- RELAY HYSTERON ---
572
- hysteron(alpha, beta, x) = loop ~ _
573
- with {
574
- loop(y) = ba.if(x < alpha, .0, ba.if(x > beta, 1.0, y));
575
- };
576
-
577
-
578
- /************************************************************************
579
- ************************************************************************
580
- - POPULATION GROWTH MODEL (termic model) -
581
- ************************************************************************
582
- ************************************************************************/
583
-
584
- //----------------------------------------------------------- ENERGY AVERAGE ---
585
- energy(xg, t, x) = avg(t, x * x * xg)
586
- with {
587
- avg(t, x) = onepole(1.0 / t, x) : ba.selectn(3, 0);
588
- onepole(cf, x) = loop ~ _ : ! , si.bus(3)
589
- with {
590
- g = tan(cf * PI * T);
591
- G = g / (1.0 + g);
592
- Ghp = 1.0 - G;
593
- Gap = G + G - 1.0;
594
- loop(s) = u , lp , hp , ap
595
- with {
596
- u = v + v + s;
597
- v0 = x - s;
598
- hp = Ghp * v0;
599
- v = G * v0;
600
- lp = v + s;
601
- ap = lp - hp;
602
- };
603
- };
604
- };
605
-
606
- //---------------------------------------------------- COMPOST TERMIC CURVES ---
607
- warpedSine(a, b, c, d, x) = a * pow((1.0 + sin(ph)) / 2.0, b)
608
- with {
609
- ph = TWOPI * (min(1.0, x + d) ^ c + .75);
610
- };
611
- // show windows
612
- //process = os.phasor(1, 4) <: warpedSine(3, 2, 5, 0) , warpedSine(2, 1.2, 4, .24) , warpedSine(1, 1, 6, .55);
613
-
614
- //-------------------------------------------------------- POPULATION GROWTH ---
615
- populationGrowth(i, G, E) = _ * a0Activation, _ * a1Activation, _ * a2Activation, _ * a3Activation
616
- with {
617
- curve(0) = warpedSine(3, 2, 5, 0);
618
- curve(1) = warpedSine(2, 1.2, 4, .24);
619
- curve(2) = warpedSine(1, 1, 6, .55);
620
- Temp = hgroup("Energy Average", E : ma.tanh : info(i, -1, 1));
621
- generationIndex = Temp : curve(i);
622
- isInReproductionCondition =
623
- hysteron(.001, .1, generationIndex) * 2.0 - 1.0;
624
- reproductionClock = isInReproductionCondition :
625
- \(state).(max(0, +(state))) ~ _;
626
- a0Activation = 1 : hgroup("Active 0", info(i, 0, 1));
627
- a1Activation = hysteron(SR, SR * 2, reproductionClock) : hgroup("Active 1", info(i, 0, 1));
628
- a2Activation = hysteron(SR * 2, SR * 3, reproductionClock) : hgroup("Active 2", info(i, 0, 1));
629
- a3Activation = hysteron(SR * 3, SR * 4, reproductionClock) : hgroup("Active 3", info(i, 0, 1));
630
- };
@@ -1,104 +0,0 @@
1
- declare name "WKR Compost Networks";
2
- declare author "Luca Spanedda";
3
- declare author "Dario Sanfilippo";
4
- declare version "1.0";
5
- declare description "2023";
6
- declare copyright "Copyright (C) 2023 Luca Spanedda <lucaspanedda1995@gmail.com>";
7
- declare license "MIT license";
8
- // Import the WKR Library
9
- import("compost_library.lib");
10
- // N = voices, M = network inputs.
11
- N = 4; M = 3;
12
-
13
-
14
- /************************************************************************
15
- ************************************************************************
16
- - AGENTS NETWORKS -
17
- ************************************************************************
18
- ************************************************************************/
19
-
20
-
21
- AgentCulture(N, M, S) =
22
- (netINPeaks : delays(S) : gains : netLimt : hgroup("ControlSignals", cntrlSignal) <:
23
- (hgroup("Agents", Agent(S)), (si.block(N), MapDynaComp)) : routeSig : hgroup("DynamicCompressors", netdynComp) : netStability) ~
24
- (matrix) <: (netEnergy, si.bus(N)) : ro.crossNM(N, N)
25
- with{
26
- routeSig = ro.crossNM(N, N) : ro.interleave(N, N / 2);
27
- // Agents Network
28
- gains = vecOp((si.bus(N) , par(i, N, 16)), *);
29
- matrix = vecOp((hadamard(N) , par(i, N, 1.0 / sqrt(N))), *);
30
- //netInsx = vecOp((si.bus(N) , si.bus(N)), +);
31
- netINPeaks = si.bus(N), (si.bus(N) <: si.bus(N * 2)) :
32
- vecOp((vecOp((si.bus(N), par(i, N, 1 - peakenvelope(10))), *), si.bus(N)), +);
33
- netdynComp = par(i, N, si.bus(2) : dynamiComp(S, i, .5, 100));
34
- netLimt = par(i, N, LookaheadLimiter(1.0, .002, 10));
35
- netStability = par(i, N, HPTPT(40) : LPTPT(15000));
36
- delays(T) = vecOp((si.bus(N) , par(i, N, (ba.take((i + 1 + T) * 10, primesThousands) : MS2T))), @);
37
- netEnergy = par(i, N, energy(100, 200));
38
- cntrlSignal = si.bus(N) <: (si.bus(N), par(i, N, controlSignalProcessing(S, i, 48, 10)));
39
- // Mapping
40
- MapDynaComp = par(i, N, 48 ^ _ );
41
- MapBP = par(i, N, vgroup("FC", MapBPf(i)), MapBPx(i))
42
- with{
43
- MapBPf(i) = 640 * 2 ^ (4 * _) : info(i, 0, 20000);
44
- MapBPx(i) = _;
45
- };
46
- MapAP = par(i, N, MapOut(i), MapAPx(i))
47
- with{
48
- MapOut(i) = _ <: vgroup("Time", MapAPt(i)), vgroup("Gain", MapAPg(i));
49
- MapAPt(i) = 10 ^ (2 * _ - 1) : infoScale(i, 0, 10) : _ * ma.SR;
50
- MapAPg(i) = _ : biToUni : map(-0.999, 0.999) : infoScale(i, -1, 1);
51
- MapAPx(i) = _;
52
- };
53
- MapGN = par(i, N, vgroup("Jit", MapGNj(i)), vgroup("Pitch", MapGNp(i)), MapGNx(i))
54
- with{
55
- MapGNj(i) = 1;
56
- MapGNp(i) = 4 ^ _ : infoScale(i, -1, 4);
57
- MapGNx(i) = _;
58
- };
59
- // Agents
60
- Agent(0) = hgroup("0 BP Agent", routeSig : MapBP : par(i, N, BPSVF(1)));
61
- Agent(1) = hgroup("1 AP Agent", routeSig : MapAP : par(i, N, AllpassWernerCascade(8, 192000, 60 * ma.SR)));
62
- Agent(2) = hgroup("2 GN Agent", routeSig : MapGN : par(i, N, Stretcher(30, 30, 1, 1, 1, 0, 10, i)));
63
- };
64
- // Populations
65
- Populations = par(i, M, AgentCulture(4, 3, i));
66
-
67
- // Populations influences (Matrix Of Influences)
68
- // Populations Influences: (Int Populations, Ext Populations) in Percent
69
- MatrixOfInfluences(Int, Ext) = si.bus(N * M) <: par(i, M, W(i) : si.bus(N * M) :> si.bus(N))
70
- with{
71
- percent(P) = (1 / 100) * P;
72
- W(0) = si.vecOp((si.bus(N * M), par(i, N * M, ba.if((i >= 0) & (i < N), percent(Int), percent(Ext/2) ))), *);
73
- W(1) = si.vecOp((si.bus(N * M), par(i, N * M, ba.if((i >= N) & (i < (N * 2)), percent(Int), percent(Ext/2)))), *);
74
- W(2) = si.vecOp((si.bus(N * M), par(i, N * M, ba.if((i >= (N * 2)) & (i < (N * 3)), percent(Int), percent(Ext/2)))), *);
75
- };
76
-
77
- // Organisms live population growth
78
- GrowthModel(E) = hgroup("Growth Model", par(i, M, vgroup("Population %i", populationGrowth(i, 24, E))));
79
- // Listening points of the network
80
- ListeningPoints = si.bus(N * M) <: (
81
- lerpMulti(12, hslider("Listening Point 1", 0, 0, 1, .001)),
82
- lerpMulti(12, hslider("Listening Point 2", 0, 0, 1, .001))
83
- );
84
-
85
-
86
- /************************************************************************
87
- ************************************************************************
88
- - COMPOST SYSTEM NETWORK (Main) -
89
- ************************************************************************
90
- ************************************************************************/
91
-
92
-
93
- // Main Compost Network
94
- WKR_Network = vgroup("Waste_Kompost_System",
95
- (
96
- vecOp((MatrixOfInfluences(95, 5), si.bus(N * M)), +) :
97
- Populations : (par(i, M, (si.bus(N)), (si.bus(N) :> _)) <:
98
- (par(i, M, si.block(N), _) :> _/(N * M)),
99
- (par(i, M, si.bus(N), !)))
100
- : (!, si.bus(N * M)) // : GrowthModel //
101
- ) ~ si.bus(N * M)
102
- ) :> (_/(N * M / 2)), (_/(N * M / 2)); // : ListeningPoints; //
103
- // outs
104
- process = si.bus(2) <: WKR_Network;
package/test/greyhole.dsp DELETED
@@ -1,8 +0,0 @@
1
- declare name "greyhole";
2
- declare version "0.1";
3
- declare author "GRAME";
4
- declare description "Greyhole demo application.";
5
-
6
- import("stdfaust.lib");
7
-
8
- process = dm.greyhole_demo;
package/test/jprev.dsp DELETED
@@ -1,8 +0,0 @@
1
- declare name "jprev";
2
- declare version "0.1";
3
- declare author "GRAME";
4
- declare description "Jprev demo application.";
5
-
6
- import("stdfaust.lib");
7
-
8
- process = dm.jprev_demo;
@@ -1,92 +0,0 @@
1
- {
2
- "name": "Oscillator440",
3
- "filename": "mono",
4
- "version": "2.63.0",
5
- "compile_options": "-lang wasm-i -ct 1 -es 1 -mcd 16 -single -ftz 0",
6
- "library_list": [
7
- "/usr/share/faust/stdfaust.lib",
8
- "/usr/share/faust/oscillators.lib",
9
- "/usr/share/faust/platform.lib",
10
- "/usr/share/faust/maths.lib",
11
- "/usr/share/faust/basics.lib"
12
- ],
13
- "include_pathnames": [
14
- "/share/faust",
15
- "/usr/local/share/faust",
16
- "/usr/share/faust",
17
- "."
18
- ],
19
- "size": 262184,
20
- "code": "1KAe",
21
- "inputs": 0,
22
- "outputs": 1,
23
- "meta": [
24
- {
25
- "author": "Fr0stbyteR"
26
- },
27
- {
28
- "basics.lib/name": "Faust Basic Element Library"
29
- },
30
- {
31
- "basics.lib/tabulateNd": "Copyright (C) 2023 Bart Brouns <bart@magnetophon.nl>"
32
- },
33
- {
34
- "basics.lib/version": "1.11.0"
35
- },
36
- {
37
- "compile_options": "-lang wasm-i -ct 1 -es 1 -mcd 16 -single -ftz 0"
38
- },
39
- {
40
- "copyright": "shren2021"
41
- },
42
- {
43
- "description": "This is an oscillator"
44
- },
45
- {
46
- "filename": "mono"
47
- },
48
- {
49
- "license": "BSD"
50
- },
51
- {
52
- "maths.lib/author": "GRAME"
53
- },
54
- {
55
- "maths.lib/copyright": "GRAME"
56
- },
57
- {
58
- "maths.lib/license": "LGPL with exception"
59
- },
60
- {
61
- "maths.lib/name": "Faust Math Library"
62
- },
63
- {
64
- "maths.lib/version": "2.6.0"
65
- },
66
- {
67
- "name": "Oscillator440"
68
- },
69
- {
70
- "oscillators.lib/name": "Faust Oscillator Library"
71
- },
72
- {
73
- "oscillators.lib/version": "1.4.0"
74
- },
75
- {
76
- "platform.lib/name": "Generic Platform Library"
77
- },
78
- {
79
- "platform.lib/version": "1.3.0"
80
- },
81
- {
82
- "version": "1.0"
83
- }
84
- ],
85
- "ui": [
86
- {
87
- "type": "vgroup",
88
- "label": "Oscillator440",
89
- "items": []
90
- }
91
- ]
92
- }
Binary file
@@ -1,198 +0,0 @@
1
- // Prime Numbers List
2
- primes =
3
- (2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73,
4
- 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163,
5
- 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251,
6
- 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349,
7
- 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443,
8
- 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557,
9
- 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647,
10
- 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757,
11
- 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863,
12
- 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983,
13
- 991, 997, 1009, 1013, 1019, 1021, 1031, 1033, 1039, 1049, 1051, 1061, 1063,
14
- 1069, 1087, 1091, 1093, 1097, 1103, 1109, 1117, 1123, 1129, 1151, 1153, 1163,
15
- 1171, 1181, 1187, 1193, 1201, 1213, 1217, 1223, 1229, 1231, 1237, 1249, 1259,
16
- 1277, 1279, 1283, 1289, 1291, 1297, 1301, 1303, 1307, 1319, 1321, 1327, 1361,
17
- 1367, 1373, 1381, 1399, 1409, 1423, 1427, 1429, 1433, 1439, 1447, 1451, 1453,
18
- 1459, 1471, 1481, 1483, 1487, 1489, 1493, 1499, 1511, 1523, 1531, 1543, 1549,
19
- 1553, 1559, 1567, 1571, 1579, 1583, 1597, 1601, 1607, 1609, 1613, 1619, 1621,
20
- 1627, 1637, 1657, 1663, 1667, 1669, 1693, 1697, 1699, 1709, 1721, 1723, 1733,
21
- 1741, 1747, 1753, 1759, 1777, 1783, 1787, 1789, 1801, 1811, 1823, 1831, 1847,
22
- 1861, 1867, 1871, 1873, 1877, 1879, 1889, 1901, 1907, 1913, 1931, 1933, 1949,
23
- 1951, 1973, 1979, 1987, 1993, 1997, 1999, 2003, 2011, 2017, 2027, 2029, 2039,
24
- 2053, 2063, 2069, 2081, 2083, 2087, 2089, 2099, 2111, 2113, 2129, 2131, 2137,
25
- 2141, 2143, 2153, 2161, 2179, 2203, 2207, 2213, 2221, 2237, 2239, 2243, 2251,
26
- 2267, 2269, 2273, 2281, 2287, 2293, 2297, 2309, 2311, 2333, 2339, 2341, 2347,
27
- 2351, 2357, 2371, 2377, 2381, 2383, 2389, 2393, 2399, 2411, 2417, 2423, 2437,
28
- 2441, 2447, 2459, 2467, 2473, 2477, 2503, 2521, 2531, 2539, 2543, 2549, 2551,
29
- 2557, 2579, 2591, 2593, 2609, 2617, 2621, 2633, 2647, 2657, 2659, 2663, 2671,
30
- 2677, 2683, 2687, 2689, 2693, 2699, 2707, 2711, 2713, 2719, 2729, 2731, 2741,
31
- 2749, 2753, 2767, 2777, 2789, 2791, 2797, 2801, 2803, 2819, 2833, 2837, 2843,
32
- 2851, 2857, 2861, 2879, 2887, 2897, 2903, 2909, 2917, 2927, 2939, 2953, 2957,
33
- 2963, 2969, 2971, 2999, 3001, 3011, 3019, 3023, 3037, 3041, 3049, 3061, 3067,
34
- 3079, 3083, 3089, 3109, 3119, 3121, 3137, 3163, 3167, 3169, 3181, 3187, 3191,
35
- 3203, 3209, 3217, 3221, 3229, 3251, 3253, 3257, 3259, 3271, 3299, 3301, 3307,
36
- 3313, 3319, 3323, 3329, 3331, 3343, 3347, 3359, 3361, 3371, 3373, 3389, 3391,
37
- 3407, 3413, 3433, 3449, 3457, 3461, 3463, 3467, 3469, 3491, 3499, 3511, 3517,
38
- 3527, 3529, 3533, 3539, 3541, 3547, 3557, 3559, 3571, 3581, 3583, 3593, 3607,
39
- 3613, 3617, 3623, 3631, 3637, 3643, 3659, 3671, 3673, 3677, 3691, 3697, 3701,
40
- 3709, 3719, 3727, 3733, 3739, 3761, 3767, 3769, 3779, 3793, 3797, 3803, 3821,
41
- 3823, 3833, 3847, 3851, 3853, 3863, 3877, 3881, 3889, 3907, 3911, 3917, 3919,
42
- 3923, 3929, 3931, 3943, 3947, 3967, 3989, 4001, 4003, 4007, 4013, 4019, 4021,
43
- 4027, 4049, 4051, 4057, 4073, 4079, 4091, 4093, 4099, 4111, 4127, 4129, 4133,
44
- 4139, 4153, 4157, 4159, 4177, 4201, 4211, 4217, 4219, 4229, 4231, 4241, 4243,
45
- 4253, 4259, 4261, 4271, 4273, 4283, 4289, 4297, 4327, 4337, 4339, 4349, 4357,
46
- 4363, 4373, 4391, 4397, 4409, 4421, 4423, 4441, 4447, 4451, 4457, 4463, 4481,
47
- 4483, 4493, 4507, 4513, 4517, 4519, 4523, 4547, 4549, 4561, 4567, 4583, 4591,
48
- 4597, 4603, 4621, 4637, 4639, 4643, 4649, 4651, 4657, 4663, 4673, 4679, 4691,
49
- 4703, 4721, 4723, 4729, 4733, 4751, 4759, 4783, 4787, 4789, 4793, 4799, 4801,
50
- 4813, 4817, 4831, 4861, 4871, 4877, 4889, 4903, 4909, 4919, 4931, 4933, 4937,
51
- 4943, 4951, 4957, 4967, 4969, 4973, 4987, 4993, 4999, 5003, 5009, 5011, 5021,
52
- 5023, 5039, 5051, 5059, 5077, 5081, 5087, 5099, 5101, 5107, 5113, 5119, 5147,
53
- 5153, 5167, 5171, 5179, 5189, 5197, 5209, 5227, 5231, 5233, 5237, 5261, 5273,
54
- 5279, 5281, 5297, 5303, 5309, 5323, 5333, 5347, 5351, 5381, 5387, 5393, 5399,
55
- 5407, 5413, 5417, 5419, 5431, 5437, 5441, 5443, 5449, 5471, 5477, 5479, 5483,
56
- 5501, 5503, 5507, 5519, 5521, 5527, 5531, 5557, 5563, 5569, 5573, 5581, 5591,
57
- 5623, 5639, 5641, 5647, 5651, 5653, 5657, 5659, 5669, 5683, 5689, 5693, 5701,
58
- 5711, 5717, 5737, 5741, 5743, 5749, 5779, 5783, 5791, 5801, 5807, 5813, 5821,
59
- 5827, 5839, 5843, 5849, 5851, 5857, 5861, 5867, 5869, 5879, 5881, 5897, 5903,
60
- 5923, 5927, 5939, 5953, 5981, 5987, 6007, 6011, 6029, 6037, 6043, 6047, 6053,
61
- 6067, 6073, 6079, 6089, 6091, 6101, 6113, 6121, 6131, 6133, 6143, 6151, 6163,
62
- 6173, 6197, 6199, 6203, 6211, 6217, 6221, 6229, 6247, 6257, 6263, 6269, 6271,
63
- 6277, 6287, 6299, 6301, 6311, 6317, 6323, 6329, 6337, 6343, 6353, 6359, 6361,
64
- 6367, 6373, 6379, 6389, 6397, 6421, 6427, 6449, 6451, 6469, 6473, 6481, 6491,
65
- 6521, 6529, 6547, 6551, 6553, 6563, 6569, 6571, 6577, 6581, 6599, 6607, 6619,
66
- 6637, 6653, 6659, 6661, 6673, 6679, 6689, 6691, 6701, 6703, 6709, 6719, 6733,
67
- 6737, 6761, 6763, 6779, 6781, 6791, 6793, 6803, 6823, 6827, 6829, 6833, 6841,
68
- 6857, 6863, 6869, 6871, 6883, 6899, 6907, 6911, 6917, 6947, 6949, 6959, 6961,
69
- 6967, 6971, 6977, 6983, 6991, 6997, 7001, 7013, 7019, 7027, 7039, 7043, 7057,
70
- 7069, 7079, 7103, 7109, 7121, 7127, 7129, 7151, 7159, 7177, 7187, 7193, 7207,
71
- 7211, 7213, 7219, 7229, 7237, 7243, 7247, 7253, 7283, 7297, 7307, 7309, 7321,
72
- 7331, 7333, 7349, 7351, 7369, 7393, 7411, 7417, 7433, 7451, 7457, 7459, 7477,
73
- 7481, 7487, 7489, 7499, 7507, 7517, 7523, 7529, 7537, 7541, 7547, 7549, 7559,
74
- 7561, 7573, 7577, 7583, 7589, 7591, 7603, 7607, 7621, 7639, 7643, 7649, 7669,
75
- 7673, 7681, 7687, 7691, 7699, 7703, 7717, 7723, 7727, 7741, 7753, 7757, 7759,
76
- 7789, 7793, 7817, 7823, 7829, 7841, 7853, 7867, 7873, 7877, 7879, 7883, 7901,
77
- 7907, 7919, 7927, 7933, 7937, 7949, 7951, 7963, 7993, 8009, 8011, 8017, 8039,
78
- 8053, 8059, 8069, 8081, 8087, 8089, 8093, 8101, 8111, 8117, 8123, 8147, 8161,
79
- 8167, 8171, 8179, 8191, 8209, 8219, 8221, 8231, 8233, 8237, 8243, 8263, 8269,
80
- 8273, 8287, 8291, 8293, 8297, 8311, 8317, 8329, 8353, 8363, 8369, 8377, 8387,
81
- 8389, 8419, 8423, 8429, 8431, 8443, 8447, 8461, 8467, 8501, 8513, 8521, 8527,
82
- 8537, 8539, 8543, 8563, 8573, 8581, 8597, 8599, 8609, 8623, 8627, 8629, 8641,
83
- 8647, 8663, 8669, 8677, 8681, 8689, 8693, 8699, 8707, 8713, 8719, 8731, 8737,
84
- 8741, 8747, 8753, 8761, 8779, 8783, 8803, 8807, 8819, 8821, 8831, 8837, 8839,
85
- 8849, 8861, 8863, 8867, 8887, 8893, 8923, 8929, 8933, 8941, 8951, 8963, 8969,
86
- 8971, 8999, 9001, 9007, 9011, 9013, 9029, 9041, 9043, 9049, 9059, 9067, 9091,
87
- 9103, 9109, 9127, 9133, 9137, 9151, 9157, 9161, 9173, 9181, 9187, 9199, 9203,
88
- 9209, 9221, 9227, 9239, 9241, 9257, 9277, 9281, 9283, 9293, 9311, 9319, 9323,
89
- 9337, 9341, 9343, 9349, 9371, 9377, 9391, 9397, 9403, 9413, 9419, 9421, 9431,
90
- 9433, 9437, 9439, 9461, 9463, 9467, 9473, 9479, 9491, 9497, 9511, 9521, 9533,
91
- 9539, 9547, 9551, 9587, 9601, 9613, 9619, 9623, 9629, 9631, 9643, 9649, 9661,
92
- 9677, 9679, 9689, 9697, 9719, 9721, 9733, 9739, 9743, 9749, 9767, 9769, 9781,
93
- 9787, 9791, 9803, 9811, 9817, 9829, 9833, 9839, 9851, 9857, 9859, 9871, 9883,
94
- 9887, 9901, 9907, 9923, 9929, 9931, 9941, 9949, 9967, 9973, 10007, 10009, 10037,
95
- 10039, 10061, 10067, 10069, 10079, 10091, 10093, 10099, 10103, 10111, 10133,
96
- 10139, 10141, 10151, 10159, 10163, 10169, 10177, 10181, 10193, 10211, 10223,
97
- 10243, 10247, 10253, 10259, 10267, 10271, 10273, 10289, 10301, 10303, 10313,
98
- 10321, 10331, 10333, 10337, 10343, 10357, 10369, 10391, 10399, 10427, 10429,
99
- 10433, 10453, 10457, 10459, 10463, 10477, 10487, 10499, 10501, 10513, 10529,
100
- 10531, 10559, 10567, 10589, 10597, 10601, 10607, 10613, 10627, 10631, 10639,
101
- 10651, 10657, 10663, 10667);
102
-
103
- // Primes Thousands Numbers List
104
- primesThousands =
105
- (10007, 10009, 10037, 10039, 10061, 10067, 10069, 10079, 10091, 10093, 10099,
106
- 10103, 10111, 10133, 10139, 10141, 10151, 10159, 10163, 10169, 10177, 10181,
107
- 10193, 10211, 10223, 10243, 10247, 10253, 10259, 10267, 10271, 10273, 10289,
108
- 10301, 10303, 10313, 10321, 10331, 10333, 10337, 10343, 10357, 10369, 10391,
109
- 10399, 10427, 10429, 10433, 10453, 10457, 10459, 10463, 10477, 10487, 10499,
110
- 10501, 10513, 10529, 10531, 10559, 10567, 10589, 10597, 10601, 10607, 10613,
111
- 10627, 10631, 10639, 10651, 10657, 10663, 10667, 10687, 10691, 10709, 10711,
112
- 10723, 10729, 10733, 10739, 10753, 10771, 10781, 10789, 10799, 10831, 10837,
113
- 10847, 10853, 10859, 10861, 10867, 10883, 10889, 10891, 10903, 10909, 10937,
114
- 10939, 10949, 10957, 10973, 10979, 10987, 10993, 11003, 11027, 11047, 11057,
115
- 11059, 11069, 11071, 11083, 11087, 11093, 11113, 11117, 11119, 11131, 11149,
116
- 11159, 11161, 11171, 11173, 11177, 11197, 11213, 11239, 11243, 11251, 11257,
117
- 11261, 11273, 11279, 11287, 11299, 11311, 11317, 11321, 11329, 11351, 11353,
118
- 11369, 11383, 11393, 11399, 11411, 11423, 11437, 11443, 11447, 11467, 11471,
119
- 11483, 11489, 11491, 11497, 11503, 11519, 11527, 11549, 11551, 11579, 11587,
120
- 11593, 11597, 11617, 11621, 11633, 11657, 11677, 11681, 11689, 11699, 11701,
121
- 11717, 11719, 11731, 11743, 11777, 11779, 11783, 11789, 11801, 11807, 11813,
122
- 11821, 11827, 11831, 11833, 11839, 11863, 11867, 11887, 11897, 11903, 11909,
123
- 11923, 11927, 11933, 11939, 11941, 11953, 11959, 11969, 11971, 11981, 11987,
124
- 12007, 12011, 12037, 12041, 12043, 12049, 12071, 12073, 12097, 12101, 12107,
125
- 12109, 12113, 12119, 12143, 12149, 12157, 12161, 12163, 12197, 12203, 12211,
126
- 12227, 12239, 12241, 12251, 12253, 12263, 12269, 12277, 12281, 12289, 12301,
127
- 12323, 12329, 12343, 12347, 12373, 12377, 12379, 12391, 12401, 12409, 12413,
128
- 12421, 12433, 12437, 12451, 12457, 12473, 12479, 12487, 12491, 12497, 12503,
129
- 12511, 12517, 12527, 12539, 12541, 12547, 12553, 12569, 12577, 12583, 12589,
130
- 12601, 12611, 12613, 12619, 12637, 12641, 12647, 12653, 12659, 12671, 12689,
131
- 12697, 12703, 12713, 12721, 12739, 12743, 12757, 12763, 12781, 12791, 12799,
132
- 12809, 12821, 12823, 12829, 12841, 12853, 12889, 12893, 12899, 12907, 12911,
133
- 12917, 12919, 12923, 12941, 12953, 12959, 12967, 12973, 12979, 12983, 13001,
134
- 13003, 13007, 13009, 13033, 13037, 13043, 13049, 13063, 13093, 13099, 13103,
135
- 13109, 13121, 13127, 13147, 13151, 13159, 13163, 13171, 13177, 13183, 13187,
136
- 13217, 13219, 13229, 13241, 13249, 13259, 13267, 13291, 13297, 13309, 13313,
137
- 13327, 13331, 13337, 13339, 13367, 13381, 13397, 13399, 13411, 13417, 13421,
138
- 13441, 13451, 13457, 13463, 13469, 13477, 13487, 13499, 13513, 13523, 13537,
139
- 13553, 13567, 13577, 13591, 13597, 13613, 13619, 13627, 13633, 13649, 13669,
140
- 13679, 13681, 13687, 13691, 13693, 13697, 13709, 13711, 13721, 13723, 13729,
141
- 13751, 13757, 13759, 13763, 13781, 13789, 13799, 13807, 13829, 13831, 13841,
142
- 13859, 13873, 13877, 13879, 13883, 13901, 13903, 13907, 13913, 13921, 13931,
143
- 13933, 13963, 13967, 13997, 13999, 14009, 14011, 14029, 14033, 14051, 14057,
144
- 14071, 14081, 14083, 14087, 14107, 14143, 14149, 14153, 14159, 14173, 14177,
145
- 14197, 14207, 14221, 14243, 14249, 14251, 14281, 14293, 14303, 14321, 14323,
146
- 14327, 14341, 14347, 14369, 14387, 14389, 14401, 14407, 14411, 14419, 14423,
147
- 14431, 14437, 14447, 14449, 14461, 14479, 14489, 14503, 14519, 14533, 14537,
148
- 14543, 14549, 14551, 14557, 14561, 14563, 14591, 14593, 14621, 14627, 14629,
149
- 14633, 14639, 14653, 14657, 14669, 14683, 14699, 14713, 14717, 14723, 14731,
150
- 14737, 14741, 14747, 14753, 14759, 14767, 14771, 14779, 14783, 14797, 14813,
151
- 14821, 14827, 14831, 14843, 14851, 14867, 14869, 14879, 14887, 14891, 14897,
152
- 14923, 14929, 14939, 14947, 14951, 14957, 14969, 14983, 15013, 15017, 15031,
153
- 15053, 15061, 15073, 15077, 15083, 15091, 15101, 15107, 15121, 15131, 15137,
154
- 15139, 15149, 15161, 15173, 15187, 15193, 15199, 15217, 15227, 15233, 15241,
155
- 15259, 15263, 15269, 15271, 15277, 15287, 15289, 15299, 15307, 15313, 15319,
156
- 15329, 15331, 15349, 15359, 15361, 15373, 15377, 15383, 15391, 15401, 15413,
157
- 15427, 15439, 15443, 15451, 15461, 15467, 15473, 15493, 15497, 15511, 15527,
158
- 15541, 15551, 15559, 15569, 15581, 15583, 15601, 15607, 15619, 15629, 15641,
159
- 15643, 15647, 15649, 15661, 15667, 15671, 15679, 15683, 15727, 15731, 15733,
160
- 15737, 15739, 15749, 15761, 15767, 15773, 15787, 15791, 15797, 15803, 15809,
161
- 15817, 15823, 15859, 15877, 15881, 15887, 15889, 15901, 15907, 15913, 15919,
162
- 15923, 15937, 15959, 15971, 15973, 15991, 16001, 16007, 16033, 16057, 16061,
163
- 16063, 16067, 16069, 16073, 16087, 16091, 16097, 16103, 16111, 16127, 16139,
164
- 16141, 16183, 16187, 16189, 16193, 16217, 16223, 16229, 16231, 16249, 16253,
165
- 16267, 16273, 16301, 16319, 16333, 16339, 16349, 16361, 16363, 16369, 16381,
166
- 16411, 16417, 16421, 16427, 16433, 16447, 16451, 16453, 16477, 16481, 16487,
167
- 16493, 16519, 16529, 16547, 16553, 16561, 16567, 16573, 16603, 16607, 16619,
168
- 16631, 16633, 16649, 16651, 16657, 16661, 16673, 16691, 16693, 16699, 16703,
169
- 16729, 16741, 16747, 16759, 16763, 16787, 16811, 16823, 16829, 16831, 16843,
170
- 16871, 16879, 16883, 16889, 16901, 16903, 16921, 16927, 16931, 16937, 16943,
171
- 16963, 16979, 16981, 16987, 16993, 17011, 17021, 17027, 17029, 17033, 17041,
172
- 17047, 17053, 17077, 17093, 17099, 17107, 17117, 17123, 17137, 17159, 17167,
173
- 17183, 17189, 17191, 17203, 17207, 17209, 17231, 17239, 17257, 17291, 17293,
174
- 17299, 17317, 17321, 17327, 17333, 17341, 17351, 17359, 17377, 17383, 17387,
175
- 17389, 17393, 17401, 17417, 17419, 17431, 17443, 17449, 17467, 17471, 17477,
176
- 17483, 17489, 17491, 17497, 17509, 17519, 17539, 17551, 17569, 17573, 17579,
177
- 17581, 17597, 17599, 17609, 17623, 17627, 17657, 17659, 17669, 17681, 17683,
178
- 17707, 17713, 17729, 17737, 17747, 17749, 17761, 17783, 17789, 17791, 17807,
179
- 17827, 17837, 17839, 17851, 17863, 17881, 17891, 17903, 17909, 17911, 17921,
180
- 17923, 17929, 17939, 17957, 17959, 17971, 17977, 17981, 17987, 17989, 18013,
181
- 18041, 18043, 18047, 18049, 18059, 18061, 18077, 18089, 18097, 18119, 18121,
182
- 18127, 18131, 18133, 18143, 18149, 18169, 18181, 18191, 18199, 18211, 18217,
183
- 18223, 18229, 18233, 18251, 18253, 18257, 18269, 18287, 18289, 18301, 18307,
184
- 18311, 18313, 18329, 18341, 18353, 18367, 18371, 18379, 18397, 18401, 18413,
185
- 18427, 18433, 18439, 18443, 18451, 18457, 18461, 18481, 18493, 18503, 18517,
186
- 18521, 18523, 18539, 18541, 18553, 18583, 18587, 18593, 18617, 18637, 18661,
187
- 18671, 18679, 18691, 18701, 18713, 18719, 18731, 18743, 18749, 18757, 18773,
188
- 18787, 18793, 18797, 18803, 18839, 18859, 18869, 18899, 18911, 18913, 18917,
189
- 18919, 18947, 18959, 18973, 18979, 19001, 19009, 19013, 19031, 19037, 19051,
190
- 19069, 19073, 19079, 19081, 19087, 19121, 19139, 19141, 19157, 19163, 19181,
191
- 19183, 19207, 19211, 19213, 19219, 19231, 19237, 19249, 19259, 19267, 19273,
192
- 19289, 19301, 19309, 19319, 19333, 19373, 19379, 19381, 19387, 19391, 19403,
193
- 19417, 19421, 19423, 19427, 19429, 19433, 19441, 19447, 19457, 19463, 19469,
194
- 19471, 19477, 19483, 19489, 19501, 19507, 19531, 19541, 19543, 19553, 19559,
195
- 19571, 19577, 19583, 19597, 19603, 19609, 19661, 19681, 19687, 19697, 19699,
196
- 19709, 19717, 19727, 19739, 19751, 19753, 19759, 19763, 19777, 19793, 19801,
197
- 19813, 19819, 19841, 19843, 19853, 19861, 19867, 19889, 19891, 19913, 19919,
198
- 19927, 19937, 19949, 19961, 19963, 19973, 19979, 19991, 19993, 19997, 20011);
@@ -1,52 +0,0 @@
1
- import("stdfaust.lib");
2
-
3
- gain = hslider("gain",.41,0,1,0.01) : si.smoo;
4
- oct = hslider("oct",.5,0,1,0.01) : si.smoo;
5
- noteLength = hslider("noteLen",.5,0,1,0.01):si.smoo;
6
- timbre = hslider("timbre",.5,0,1,0.01):si.smoo;
7
- filterAmt = hslider("filter",.5,0,1,0.001):si.smoo;
8
- freq = hslider("freq [unit:Hz][scale:log]", 110, 20, 24000, 1): si.smooth(ba.tau2pole(.30));
9
- verbAmt= hslider("reverb",.5,0,1,0.01):si.smoo;
10
- // verb = hslider("reverb",0,0,1,0.01):si.smooth;
11
- gate = button("note on/off"); // Add this button
12
-
13
- //oscillators
14
- nOscs = 8;
15
- offset = hslider("offset",.25,0,0.25,0.001):si.smoo * timbre;
16
- // offset = 0.05;
17
- saws = par(
18
- i,
19
- nOscs,
20
- os.saw2f4(
21
- freq/4 * ((i+1))
22
- + offset*i*(-1*i%2)*timbre
23
- )
24
- ):> /(nOscs);
25
-
26
- sinOsc = (os.osc(freq)+os.osc(freq*4-offset*2))/4;
27
-
28
- sound = sinOsc,saws:si.interpolate(timbre):ve.oberheimLPF(filterAmt,2);
29
- // ADSR envelope
30
- envelope = gate : en.adsr(0.01, 0.1, 0.9, 0.5)*.75;
31
-
32
- dry = sound * envelope * gain;
33
- reverbApplied =
34
- dry <: re.jpverb(
35
- 1, //decay s
36
- 0.45, //damp
37
- 1, //size
38
- 0.8, //early
39
- 0.15, //modulation depth
40
- .01, //mod freq
41
- .8, //low
42
- .6, //mid
43
- 1, //high
44
- 3000, //lowcut
45
- 7000 //highcut
46
- )<:
47
- dry*(1-verbAmt)+_*verbAmt,
48
- dry*(1-verbAmt)+_*verbAmt;
49
-
50
- //mixer
51
- process = reverbApplied;
52
-
package/test/t1.cjs DELETED
@@ -1,46 +0,0 @@
1
- const FaustWasm = require("@grame/faustwasm");
2
- const path = require("path");
3
- const fs = require("fs");
4
-
5
- const {
6
- instantiateFaustModuleFromFile,
7
- LibFaust,
8
- WavEncoder,
9
- FaustMonoDspGenerator,
10
- FaustCompiler,
11
- FaustSvgDiagrams
12
- } = FaustWasm;
13
-
14
- (async () => {
15
- const faustModulePath = path.join(__dirname, "../node_modules/@grame/faustwasm/libfaust-wasm/libfaust-wasm.js");
16
-
17
- // initialize the libfaust wasm
18
- const faustModule = await instantiateFaustModuleFromFile(faustModulePath);
19
-
20
- // Get the Faust compiler
21
- const libFaust = new LibFaust(faustModule);
22
- console.log(libFaust.version());
23
- const compiler = new FaustCompiler(libFaust);
24
- const generator = new FaustMonoDspGenerator();
25
- const sampleRate = 48000;
26
- const name = "Djembe"
27
- const argv = ["-I", "libraries/"];
28
- const code = `
29
- import("stdfaust.lib");
30
- process = ba.pulsen(1, 10000) : pm.djembe(60, 0.3, 0.4, 1);
31
- `;
32
- // Compile the DSP
33
- await generator.compile(compiler, name, code, argv.join(" "));
34
- const processor = await generator.createOfflineProcessor(sampleRate, 1024);
35
-
36
- // Generate SVG diagrams.
37
- const svgDiagrams = new FaustSvgDiagrams(compiler);
38
- const svgs = svgDiagrams.from(name, code, argv.join(" "));
39
- console.log(Object.keys(svgs));
40
-
41
- const out = processor.render(null, 192000);
42
- const wav = WavEncoder.encode(out, { sampleRate, bitDepth: 24 });
43
-
44
- // The wav file is generated
45
- fs.writeFileSync(`${__dirname}/out.wav`, new Uint8Array(wav));
46
- })();
package/test/t1.js DELETED
@@ -1,46 +0,0 @@
1
- const FaustWasm = require("@grame/faustwasm");
2
- const path = require("path");
3
- const fs = require("fs");
4
-
5
- const {
6
- instantiateFaustModuleFromFile,
7
- LibFaust,
8
- WavEncoder,
9
- FaustMonoDspGenerator,
10
- FaustCompiler,
11
- FaustSvgDiagrams
12
- } = FaustWasm;
13
-
14
- (async () => {
15
- const faustModulePath = path.join(__dirname, "../node_modules/@grame/faustwasm/libfaust-wasm/libfaust-wasm.js");
16
-
17
- // initialize the libfaust wasm
18
- const faustModule = await instantiateFaustModuleFromFile(faustModulePath);
19
-
20
- // Get the Faust compiler
21
- const libFaust = new LibFaust(faustModule);
22
- console.log(libFaust.version());
23
- const compiler = new FaustCompiler(libFaust);
24
- const generator = new FaustMonoDspGenerator();
25
- const sampleRate = 48000;
26
- const name = "Djembe"
27
- const argv = ["-I", "libraries/"];
28
- const code = `
29
- import("stdfaust.lib");
30
- process = ba.pulsen(1, 10000) : pm.djembe(60, 0.3, 0.4, 1);
31
- `;
32
- // Compile the DSP
33
- await generator.compile(compiler, name, code, argv.join(" "));
34
- const processor = await generator.createOfflineProcessor(sampleRate, 1024);
35
-
36
- // Generate SVG diagrams.
37
- const svgDiagrams = new FaustSvgDiagrams(compiler);
38
- const svgs = svgDiagrams.from(name, code, argv.join(" "));
39
- console.log(Object.keys(svgs));
40
-
41
- const out = processor.render(null, 192000);
42
- const wav = WavEncoder.encode(out, { sampleRate, bitDepth: 24 });
43
-
44
- // The wav file is generated
45
- fs.writeFileSync(`${__dirname}/out.wav`, new Uint8Array(wav));
46
- })();