vco2init

vco2init — Calcul des tables à utiliser par l'opcode vco2.

Description

vco2init calcule des tables à utiliser par l'opcode vco2. En option, on peut accéder aussi à ces tables comme si elles étaient des tables de fonction standard de Csound. Dans ce cas, on peut utiliser vco2ft pour trouver le numéro de table correct pour une fréquence d'oscillateur donnée.

Dans la plupart des cas, cet opcode est appelé depuis l'en-tête de l'orchestre. L'utilisation de vco2init dans des instruments est possible mais non recommandée. En effet, le remplacement de tables durant l'exécution peut causer un plantage de Csound si d'autres opcodes sont en train d'accéder à ces tables au même moment.

Notez que vco2init n'est pas nécessaire au fonctionnement de vco2 (les tables sont automatiquement allouées au premier appel de vco2, si ce n'est pas déjà fait), cependant il peut être utile dans certains cas :

  • Pré-calcul des tables pendant le chargement de l'orchestre. C'est utile lorque l'on ne veut pas générer les tables pendant l'exécution, afin de ne pas risquer une interruption du traitement en temps réel.

  • Partage des tables comme ftables Csound. Par défaut, ces tables ne sont accessibles que par vco2.

  • Modification des paramètres par défaut des tables (par exemple leur taille) ou utilisation d'une forme d'onde définie par l'utilisateur spécifiée dans une table de fonction.

Syntaxe

ifn vco2init iwave [, ibasfn] [, ipmul] [, iminsiz] [, imaxsiz] [, isrcft]

Initialisation

ifn -- le premier numéro de table libre après les tables allouées. Si ibasfn n'a pas été spécifié, -1 est retourné.

iwave -- somme des valeurs suivantes sélectionnant quelles tables d'onde il faut calculer :

  • 16 : triangle

  • 8 : onde carrée

  • 4 : pulsation (non normalisée)

  • 2 : 4 * x * (1 - x) (intégration d'une dent de scie)

  • 1 : dent de scie

Alternativement, iwave peut être fixé à un entier négatif qui sélectionne une forme d'onde définie par l'utilisateur. Pour cela, le paramètre isrcft doit être aussi spécifié. vco2 peut accéder à la forme d'onde numéro -1. Cependant, les autres formes d'onde définies par l'utilisateur ne sont utilisables qu'avec vco2ft ou vco2ift.

ibasfn (facultatif, par défaut -1) -- numéro de ftable à partir duquel les opcodes autres que vco2 peuvent accéder à l'ensemble de tables. Il est nécessaire pour les formes d'onde définies par l'utilisateur, à l'exception de -1. Si cette valeur est inférieure à 1, il n'est pas possible d'accéder aux tables calculées par vco2init en tant que tables de fonction de Csound.

ipmul (facultatif, par défaut 1,05) -- coefficient multiplicatif pour le nombre d'harmoniques. Si une table a n harmoniques, la suivante en aura n * ipmul (au moins n + 1). L'intervalle autorisé pour ipmul va de 1,01 à 2. Zéro et les valeurs négatives sélectionnent la valeur par défaut (1,05).

iminsiz (facultatif, par défaut -1) -- taille de table minimale.

imaxsiz (facultatif, par défaut -1) -- taille de table maximale.

La taille de table réelle est calculée en multipliant la racine carrée du nombre d'harmoniques par iminsiz, puis en arrondissant le résultat à la puissance de deux supérieure, tout en l'obligeant à ne pas dépasser imaxsiz.

Les deux paramètres, iminsiz et imaxsiz, doivent être des puissances de deux, dans l'intervalle autorisé. L'intervalle autorisé va de 16 à 262144 pour iminsiz jusqu'à 16777216 pour imaxsiz. Zéro ou des valeurs négatives sélectionnent les réglages par défaut :

  • La taille minimale est 128 pour toutes les formes d'onde sauf pour la pulsation (iwave = 4). Sa taille minimale est de 256.

  • La taille maximale par défaut vaut normalement la taille minimale multipliée par 64, mais pas plus de 16384 si possible. Elle vaut toujours au moins le taille minimale.

isrcft (facultatif, par défaut -1) -- numéro de la ftable source pour les formes d'onde définies par l'utilisateur (si iwave < 0). isrcft doit pointer sur une table de fonction contenant la forme d'onde à utiliser pour générer le tableau de tables. Il est recommandé d'avoir une taille de table d'au moins imaxsiz points. Si iwave n'est pas négatif (les tables d'onde internes sont utilisées), isrcft est ignoré.

[Avertissement] Avertissement

Le nombre et la taille des tables ne sont pas fixes. Les orchestres ne doivent pas dépendre de ces paramètres, car ils peuvent changer d'une version à l'autre de Csound.

Si la table sélectionnée existe déjà, elle est remplacée. Si un opcode est en train d'accéder aux tables au même moment, il est fort probable qu'un plantage se produise. C'est pourquoi il est recommandé de n'utiliser vco2init que dans l'en-tête de l'orchestre.

Il ne faut pas remplacer/écraser ces tables par les routines GEN ou l'opcode ftgen. Sinon, un comportement imprévisible voire un plantage de Csound peuvent se produire si vco2 est utilisé. Le premier numéro de ftable libre après le tableau de tables est retourné dans ifn.

Exemples

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

Exemple 1163. Exemple de l'opcode vco2init.

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
-odac  ;;;realtime audio out
;-iadc    ;;;uncomment -iadc if realtime audio input is needed too
; For Non-realtime ouput leave only the line below:
; -o vco2init.wav -W ;;; for file output any platform
</CsOptions>
<CsInstruments>

sr=44100
ksmps=1
nchnls=2

; create waveform with discontinuities, so it has a lot of high freq content
gitable ftgen 0, 0, 2^16+1, 7, -1, 2^14, 1, 0, -1, 2^14, 1, 0, -1, 2^15, 1
; make bandlimited tables of the waveform
gi_nextfree vco2init -gitable, gitable+1, 1.05, 128, 2^16, gitable
gitable_bl = -gitable

instr 1

kfreq  expon 14000, p3, 500
kfn    vco2ft kfreq, gitable_bl
asig   oscilikt 5000, kfreq, kfn
printk 0.1, kfn

; remove semicolon on next line to hear original waveform, demonstrating the aliasing
;asig   oscili 5000, kfreq, gitable
       outs asig, asig

endin
</CsInstruments>
<CsScore>
i1 0 5
e
</CsScore>
</CsoundSynthesizer>


Sa sortie contiendra des lignes comme celles-ci :

 i   1 time     0.00002:   103.00000
 i   1 time     0.10000:   103.00000
 i   1 time     0.20000:   103.00000
 i   1 time     0.30002:   103.00000
 i   1 time     0.40000:   104.00000
 i   1 time     0.50000:   104.00000
.......
......
 i   1 time     4.80002:   135.00000
 i   1 time     4.90000:   136.00000
 i   1 time     5.00000:   138.00000

Voir aussi l'exemple de l'opcode vco2.

Voir aussi

vco2ft, vco2ift et vco2.

Crédits

Auteur : Istvan Varga

Nouveau dans la version 4.22