prepiano — Creates a tone similar to a piano string prepared in a Cageian fashion.
Audio output is a tone similar to a piano string, prepared with a number of rubbers and rattles. The method uses a physical model developed from solving the partial differential equation.
ares prepiano ifreq, iNS, iD, iK, \
iT30,iB, kbcl, kbcr, imass, ihvfreq, iinit, ipos, ivel, isfreq, \
isspread[, irattles, irubbers]
al,ar prepiano ifreq, iNS, iD, iK, \
iT30,iB, kbcl, kbcr, imass, ihvfreq, iinit, ipos, ivel, isfreq, \
isspread[, irattles, irubbers]
ifreq -- The base frequency of the string.
iNS -- the number of strings involved. In a real piano 1, 2 or 3 strings are found in different frequency regions.
iD -- the amount each string other that the first is detuned from the main frequency, measured in cents.
iK -- dimensionless stiffness parameter.
iT30 -- 30 db decay time in seconds.
ib -- high-frequency loss parameter (keep this small).
imass -- the mass of the piano hammer.
ihvfreq -- the frequency of the natural vibrations of the hammer.
iinit -- the initial position of the hammer.
ipos -- position along the string that the strike occurs.
ivel -- normalized strike velocity.
isfreq -- scanning frequency of the reading place.
isspread -- scanning frequency spread.
irattles -- table number giving locations of any rattle(s).
irubbers -- table number giving locations of any rubbers(s).
The rattles and rubbers tables are collections of four values, preceeded by a count. In the case of a rattle the four are position, mass density ratio of rattle/string, frequency of rattle and vertical length of the rattle. For the rubber the fours are position, mass density ratio of rubber/string, frequency of rubber and the loss parameter.
A note is played on a piano string, with the arguments as below.
kbcL -- Boundary condition at left end of string (1 is clamped, 2 pivoting and 3 free).
kbcR -- Boundary condition at right end of string (1 is clamped, 2 pivoting and 3 free).
Note that changing the boundary conditions during playing may lead to glitches and is made available as an experiment.
Here is an example of the prepiano opcode. Play prepiano.csd
Example 782. Example of the prepiano opcode.
See the sections Real-time Audio and Command Line Flags for more information on using command line flags.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform -odac ;;;realtime audio out ;-iadc ;;;uncomment -iadc if real audio input is needed too ; For Non-realtime ouput leave only the line below: ; -o prepiano.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 instr 1 ;; fund NS detune stiffness decay loss (bndry) (hammer) scan prep aa,ab prepiano 60, 3, 10, p4, 3, 0.002, 2, 2, 1, 5000, -0.01, p5, p6, 0, 0.1, 1, 2 outs aa*.2, ab*.2 endin </CsInstruments> <CsScore> f1 0 8 2 1 0.6 10 100 0.001 ;; 1 rattle f2 0 8 2 1 0.7 50 500 1000 ;; 1 rubber i1 0.0 1 1 0.09 20 i1 1 . -1 0.09 40 ;; 1 -> skip initialisation i1 2 . -1 0.09 60 i1 3 . -1 0.09 80 i1 4 1.8 -1 0.09 100 e </CsScore> </CsoundSynthesizer>