User-Defined Opcode Database

# Y_x4p_k

Calcucaltes a Y value from a given X and 2 pairs of X/Y points, at k-time

### Description

Performs a simple linear equation at k-time. The x-range is given by two points x1 and x2; the y-range by y1 and y2. The function returns the y value for a given x.
See the example below for a practical application (instr 2).

### Syntax

ky Y_x4p_k kx, kx1, kx2, ky1, ky2

### Performance

kx1, ky1 - two points related to each other
kx2, ky2 - two other points related to each other
kx - another x value
ky - y value related to ix

### Code

opcode Y_x4p_k, k, kkkkk
kx, kx1, kx2, ky1, ky2 xin
kmm       =         (ky2-ky1) / (kx2-kx1)
knn       =         ky1 - kmm*kx1
ky        =         kmm*kx + knn
xout      ky
endop

### Examples

<CsoundSynthesizer>
<CsOptions>
-m0 -n
</CsOptions>
<CsInstruments>

opcode Y_x4p_i, i, iiiii
;calculates y from two given points in x dimension, two in y dimension, and an x input, at i-rate
ix, ix1, ix2, iy1, iy2 xin
imm       =         (iy2-iy1) / (ix2-ix1)
inn       =         iy1 - imm*ix1
iy        =         imm*ix + inn
xout      iy
endop

opcode Y_x4p_k, k, kkkkk
;calculates y from two given points in x dimension, two in y dimension, and an x input, at i-rate
kx, kx1, kx2, ky1, ky2 xin
kmm       =         (ky2-ky1) / (kx2-kx1)
knn       =         ky1 - kmm*kx1
ky        =         kmm*kx + knn
xout      ky
endop

instr 1
;having a db input range from -20 to -40 ...
idblow    =         -40
idbhigh   =         -20
;... and a related transposition range from 100 to 500 cents
ictlow    =         100
icthigh   =         500
;which is the transposition for an input of -35 db?
idb       =         -35
icnt      Y_x4p_i   idb, idblow, idbhigh, ictlow, icthigh
prints    "i-rate:%n"
prints    "Input = %f dB -> Transposition = %f Cents.%n", idb, icnt
endin

instr 2
;having a db input range from -20 to -40 ...
idblow    =         -40
idbhigh   =         -20
;... and a related transposition range from 100 to 500 cents
ictlow    =         100
icthigh   =         500
;calculate a moving transposition for a live input
kdb       random    -40, -20
kcnt      Y_x4p_k   kdb, idblow, idbhigh, ictlow, icthigh
prints    "k-rate:%n"
printks   "Input = %f dB -> Transposition = %f Cents.%n", 1, kdb, kcnt
endin

</CsInstruments>
<CsScore>
i 1 0 0
i 2 0 5
</CsScore>
</CsoundSynthesizer>

### Credits

joachim heintz 2011

 Previous Home Next Y_x4p_i LpPhsr