GEN08

GEN08 — Génère une courbe spline cubique par morceaux.

Description

Ce sous-programme génèrera une courbe spline cubique par morceaux, la plus lisse possible le long de tous les points spécifiés.

Syntaxe

f # date taille 8 a n1 b n2 c n3 d ...

Initialisation

taille -- nombre de points dans la table. Doit être une puissance de 2 ou une puissance-de-2 plus 1 (voir instruction f).

a, b, c, etc. -- valeurs d'ordonnée de la fonction.

n1, n2, n3 ... -- longueur de chaque segment mesurée en valeurs mémorisées. Ne peuvent pas être nulles, mais peuvent être fractionnaires. Un segment particulier peut stocker ou non des valeurs ; les valeurs stockées seront générées à des points entiers à partir de début de la fonction. La somme n1 + n2 + ... sera normalement égale à taille pour les fonctions complètement spécifiées.

[Note] Note

  • GEN08 construit une table stockée à partir de morceaux d'une fonction polynomiale cubique. Chaque segment s'étend entre deux points spécifiés mais dépend aussi de leurs voisins de chaque côté. Les segments voisins coïncideront en valeur et en pente à leur point commun. (La pente commune est celle d'une parabole passant par ce point et ses deux voisins). La pente aux deux extrémités de la fonction est forcée à zéro (plate).

  • Conseil : pour créer une discontinuité de pente ou de valeur dans la fonction stockée, disposer une série de points dans l'intervalle entre deux valeurs stockées ; faire de même pour une pente non nulle à l'une des extrémités.

Exemples

Voici un exemple de la routine GEN08. Il utilise le fichier gen08.csd.

Exemple 1281. Un exemple de la routine GEN08.

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

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

instr 1

ifn  = p4				;choose between tables
kcps init 1/p3				;create index over duration of note.
kndx phasor kcps
ixmode = 1
kval table kndx, 2, ixmode		;normalize index data

ibasefreq = 440
kfreq = kval * 100			;scale
asig  poscil .7, ibasefreq + kfreq, 1	;and add to frequency
      outs asig, asig
  
endin
</CsInstruments>
<CsScore>
f 1 0 16384 10 1	;sine wave.
f 2 0 65 8 0 16 1 16 1 16 0 17 0
f 3 0 65 8 -1 32 1 2 0 14 0 17 0

i 1 0 2 1
i 1 3 2 2
e
</CsScore>
</CsoundSynthesizer>


Voici les diagrammes des formes d'onde des routines GEN08 utilisées dans l'exemple :

f 2 0 65 8 0 16 1 16 1 16 0 17 0 - une courbe avec une bosse régulière au milieu, brièvement négative sur les bords et plate aux extrémités

f 2 0 65 8 0 16 1 16 1 16 0 17 0 - une courbe avec une bosse régulière au milieu, brièvement négative sur les bords et plate aux extrémités

f 3 0 65 8 -1 32 1 2 0 14 0 17 0 - à partir d'une valeur négative, une courbe avec une bosse régulière, puis négative créant une petite bosse et enfin plate

f 3 0 65 8 -1 32 1 2 0 14 0 17 0 - à partir d'une valeur négative, une courbe avec une bosse régulière, puis négative créant une petite bosse et enfin plate

Voir aussi

GEN05, GEN06 et GEN07