xyscale

xyscale — Interpolation linéaire 2D.

Description

Opcode du greffon emugens.

Interpolation linéaire 2D entre quatre points à (0,0), (1,0), (0,1) et (1,1)

Syntaxe

kout xyscale kx, ky, k00, k10, k01, k11

Exécution

kx, ky -- Coordonnées pour évaluer l'interpolation. Valeurs entre 0 et 1, où :

k00 -- valeur du point de coordonnées (x=0, y=0)

k10 -- valeur du point de coordonnées (x=1, y=0)

k01 -- valeur du point de coordonnées (x=0, y=1)

k11 -- valeur du point de coordonnées (x=1, y=1)


      (0,1)      (1,1)

      
      (0,0)      (1,0)
         
              
    

Etant données quatre valeurs placées aux sommets d'un carré, la valeur interpolée au point (x, y) est trouvée, où x et y sont compris entre 0 et 1.

Examples

Voici un exemple de l'opcode xyscale. Il utilise le fichier xyscale.csd.

Exemple 1234. Exemple de l'opcode xyscale.

<CsoundSynthesizer>
<CsOptions>
; Select audio/midi flags here according to platform
-odac     ;;;RT audio out
;-iadc    ;;;uncomment -iadc if RT audio input is needed too
; For Non-realtime ouput leave only the line below:
; -o xyscale.wav -W ;;; for file output any platform

; By Stefano Cucchi 2020

</CsOptions>
<CsInstruments>

sr = 44100
ksmps = 32
nchnls = 2
0dbfs = 1

instr 1
; In the instr 1  using f1 and f2 you reach the 4 corners (values)
k00 = p4
k10 = p5
k01 = p6
k11 = p7

kx oscil 1, p8, p9
ky oscil 1, p10, p11

kout1 xyscale kx, ky, k00, k10, k01, k11 
kout2 xyscale kx, ky, k00*3/2, k10*4/3, k01*5/4, k11*6/5

a1 buzz 0.2, kout1, 8, 3
a2 buzz 0.2, kout2, 4, 3

outs a1, a2

endin

instr 2
; In the instr 2 setting the first value to 0 or 1 (p8 & p9) you can start from the corner  (value) you want

k00 = p4
k10 = p5
k01 = p6
k11 = p7

kx randomh 0, 1, 2, 2, p8 ; p8 is the X starting value
ky randomh 0, 1, 2, 2, p9 ; p9 is the Y starting value

kout1 xyscale kx, ky, k00, k10, k01, k11 
kout2 xyscale kx, ky, k00*3/2, k10*4/3, k01*5/4, k11*6/5

a1 buzz 0.2, kout1, 8, 3
a2 buzz 0.2, kout2, 4, 3

outs a1, a2

endin


</CsInstruments>
<CsScore>


f1 0 1024 -7 0 400 0 100 1 400 1 124 0
f2 0 1024 -7 0 200 0 100 1 400 1 100 0 224 1
f3 0 1024 10 1 

i1 0 10 300 400 500 600 0.3 1 0.2 2
i2 10 10 300 410 520 630 0 0

e


</CsScore>
</CsoundSynthesizer>


Voici un autre exemple de l'opcode xyscale. Il utilise le fichier xyscale-FLTK.csd.

Exemple 1235. Exemple avancé de l'opcode xyscale.

Voir les sections Audio en Temps Réel et Options de la Ligne de Commande pour plus d'information sur l'utilisation des options de la ligne de commande.

<CsoundSynthesizer>
<CsOptions>
; Select audio/midi flags here according to platform
; Audio out   Audio in    No messages
-odac           -iadc     -d     ;;;RT audio I/O
</CsOptions>
<CsInstruments>

ksmps=128
nchnls=2

giwidth = 400
giheight = 300
FLpanel "FLmouse", giwidth, giheight, 10, 10
FLpanelEnd

FLrun

0dbfs = 1

instr 1
  ; We define four chords for bottom-left, bottom-right, top-left and top-right
  ; Use the mouse to interpolate between them
  ibl[] fillarray ntom:i("4C"), ntom:i("4Eb"), ntom:i("4G")
  itl[] fillarray ntom:i("4E"), ntom:i("4G#"), ntom:i("4B")
  ibr[] fillarray ntom:i("4G"), ntom:i("4A"), ntom:i("4B")
  itr[] fillarray ntom:i("4Eb"), ntom:i("4Eb+"), ntom:i("4F")
 
  kmousex, kmousey, kb1, kb2, kb3    FLmouse 2
  kx = limit(kmousex/giwidth, 0, 1)
  ky = 1 - limit(kmousey/giheight, 0, 1)

  printf "x: %f   y: %f \n", changed(kx, ky), kx, ky

  iamp = 0.1
  a0 oscili iamp, mtof(xyscale(kx, ky, ibl[0], itl[0], ibr[0], itr[0]))
  a1 oscili iamp, mtof(xyscale(kx, ky, ibl[1], itl[1], ibr[1], itr[1]))
  a2 oscili iamp, mtof(xyscale(kx, ky, ibl[2], itl[2], ibr[2], itr[2]))
  aout = sum(a0, a1, a2)
  outs aout, aout  
endin

</CsInstruments>
<CsScore>
i 1 0 120

</CsScore>
</CsoundSynthesizer>


Voir aussi

scale, ntrpol, linlin

Crédits

Par : Eduardo Moguillansky 2017