class:: OteyPianoStrings
summary:: Piano physical model.
categories:: UGens>PhysicalModels


Description::

Digital wave guide physical model of a piano string wrapping the code provided by Clayton Otey.

It only modelizes the string to feed the soundboard (which is the most CPU expensive part) and must be used with OteySoundBoard to get the sound. (see example)

It is important to release synth once finished because because it is CPU expensive.


Classmethods::

method::ar

argument::freq
Sound frequency.

argument::vel
Key pulsation velocity. Betwen 0 and 1.

argument::t_gate
Retriggers note, use a TriggerControl for not retriggering continuosly.

argument::rmin
minimum string radio

argument::rmax
maximun string radio

argument::rampl
radius left sigmoidal shape.

argument::rampr
radius right sigmoidal shape.

argument::rcore
cord nucleus radio.

argument::lmin
minimum string length.

argument::lmax
maximum string length.

argument::lampl
lenght left sigmoidal shape.

argument::lampr
lenght right sigmoidal shape.

argument::rho
string density multiplier.

argument::e
young modulus multiplier.

argument::zb
bridge impedance multiplier.

argument::zh
hammer impedance multiplier.

argument::mh
mass hammer multiplier.

argument::k
force hammer multiplier.

argument::alpha
hysteresys hammer multiplier.

argument::p
stiffness_exponent_hammer multiplier.

argument::hpos
hammer position. (0 to 1)

argument::loss
string loss factor. 

argument::detune
detuning among 3 strings.

argument::hammer_type
1 is Stulov model, 2 is Banks model.

Examples::

code::
//Define piano synthdef and soundboard
(
SynthDef(\help_oteypianostring, { |out=0, freq=440,gate=1, amp=0.5,rho=1|
    var son = OteyPianoStrings.ar(freq, amp, rho:rho)*EnvGen.ar(Env.asr(0,1,0.1),gate,doneAction:2);
    Out.ar(out, Pan2.ar(son * 1, LinLin.kr(freq,36.midicps,90.midicps,-0.75,0.75)));
}).add;

SynthDef(\piano_soundboard,{
	var audio = In.ar([20, 21], 2);
	audio = OteySoundBoard.ar(audio);
	Out.ar(0,audio);
}).add
)

//start soundboard effect
Synth.tail(1,\piano_soundboard);

//Use it.
(
Pbind(
    \instrument, \help_oteypianostring,
    \delta, 1,
    \dur, 3,
    \degree, Pseq([1,3,5], inf),
	\out, 20,
).play;
)

::
