Hi list,I try to implement the scanned synthesis algo in Faust.You can find all the information about this synthesis there : http://www.billverplank.com/ScannedSynthesis.PDFand more particularly in the appendix.
Unfortunately, my code crashes during compilation and I do not know if my mistake comes from:
- the construction of my circular string, - the excitement of my string, - when updating my string, - my use of rwtable, - or a mix of all this? Any idea? Thanks, Sébastien
declare name "Scanned Synthesis"; declare description "Source : http://www.billverplank.com/ScannedSynthesis.PDF"; // declare nvoices "8"; import("stdfaust.lib"); gate = button ("v:ScannedSynthesis/h:[1]midi/[0]gate"); freq = hslider("v:ScannedSynthesis/h:[1]midi/[1]freq[unit:Hz] [style:knob]", 220, 20, 5000, 1); gain = hslider("v:ScannedSynthesis/h:[1]midi/[9]gain [style:knob]", 0.1, 0, 1, 0.1):si.smoo; bend = hslider("v:ScannedSynthesis/h:[1]midi/[2]bend[hidden:1][midi:pitchwheel][style:knob]",1,0.9,1.1,0.01):si.polySmooth(gate,0.999,1); sr = 1/0.005; nbMass = 30; m = hslider("v:ScannedSynthesis/h:[2]Physical/[1]mass [style:knob]", 1, 0, 100, 0.01); //masse de l’élément i. k = hslider("v:ScannedSynthesis/h:[2]Physical/[2]tension [style:knob]", 1, 0, 100, 0.01); //raideur effective entre les éléments i et i-1. c = hslider("v:ScannedSynthesis/h:[2]Physical/[3]spring [style:knob]", 1, 0, 100, 0.01); //raideur entre la terre et le i ème élément, d = hslider("v:ScannedSynthesis/h:[2]Physical/[4]damping [style:knob]", 1, 0, 100, 0.01); //amortissement du i ème élément. f = hslider("v:ScannedSynthesis/h:[2]Physical/[5]force [style:knob]", 0.1, 0, 100, 0.1); p1 = (2+(sr*d/m)+(2*2*sr*k/m))/denom; p2 = (2*sr*k/m)/denom; p3 = 1/denom; p4 = (2*sr/m)/denom; denom = 1-(sr*d/m)+(2*sr*c/m); x = ba.if(gate==1, par(i, nbMass, ba.if(i==int(nbMass/2),1,ba.take(i+1,x'))), par(i, nbMass, // Xi(n) = P1.Xi(n-1) + P2.[Xi-1(n-1) + Xi+1(n-1)] + P3.Xi(n-2) + P4.f ba.if(i==0, (p1*ba.take(i+1,[email protected](1/sr))) + (p2*(ba.take(nbMass,[email protected](1/sr)) + ba.take(i+2),[email protected](1/sr))) + (p3*ba.take(i+1,[email protected](2/sr))) + (p4*f), (p1*ba.take(i+1,[email protected](1/sr))) + (p2*(ba.take(i,[email protected](1/sr)) + ba.take((i+2)%(nbMass+1)),[email protected](1/sr))) + (p3*ba.take(i+1,[email protected](2/sr))) + (p4*f) ) ) ); upD = +(1)~_; process = rwtable(nbMass, 0.0, upD%nbMass, x, os.phasor(nbMass, freq*bend))*gain;
------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________ Faudiostream-users mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/faudiostream-users
