vco2

vco2 — Implémentation d'un oscillateur à bande de fréquence limitée qui utilise des tables pré-calculées.

Description

vco2 est semblable à vco. Mais l'implémentation utilise des tables pré-calculées de formes d'onde à bande de fréquence limitée (voir aussi GEN30) plutôt que d'intégrer des impulsions. Cet opcode peut être plus rapide que vco (particulièrement lors de l'utilisation d'un faible taux de contrôle) et il permet également une meilleure qualité sonore. De plus, il y a plus de formes d'onde et la phase de l'oscillateur peut être modulée au taux-k. Il a pour inconvénient une utilisation plus importante de la mémoire. Pour plus de détails sur les tables de vco2, voir aussi vco2init et vco2ft.

Syntaxe

ares vco2 kamp, kcps [, imode] [, kpw] [, kphs] [, inyx]

Initialisation

imode (facultatif, par défaut 0) -- somme des valeurs représentant la forme d'onde et ses valeurs de contrôle.

On peut utiliser ces valeurs pour imode :

  • 16 : active le contrôle de la phase au taux-k (s'il est positionné, kphs est un paramètre de taux-k nécessaire pour permettre la modulation de la phase)

  • 1 : ignorer l'initialisation

On peut utiliser exactement une seule de ces valeurs de imode pour choisir la forme d'onde à générer :

  • 14 : forme d'onde -1 définie par l'utilisateur (nécessite l'utilisation de l'opcode vco2init)

  • 12 : triangle (pas de rampe, plus rapide)

  • 10 : onde carrée (pas de PWM, plus rapide)

  • 8 : 4 * x * (1 - x) (c'est-à-dire l'intégration d'une dent de scie)

  • 6 : pulsation (non normalisée)

  • 4 : dent de scie / triangle / rampe

  • 2 : carrée / PWM

  • 0 : dent de scie

La valeur par défaut de imode est zéro, ce qui signifie une onde en dent de scie sans contrôle de la phase au taux-k.

inyx (facultatif, par défaut 0,5) -- largeur de bande de l'onde générée exprimée en pourcentage (0 à 1) du taux d'échantillonnage. L'intervalle attendu va de 0 à 0,5 (c'est-à-dire jusqu'à sr/2), les autres valeurs étant limitées à cet intervalle.

En fixant inyx à 0,25 (sr/4), ou à 0,3333 (sr/3), on peut produire un son plus « gras » dans certains cas, bien que la qualité sera probablement réduite.

Exécution

ares -- le signal audio en sortie.

kamp -- amplitude. Si imode vaut 6 (pulsation), le niveau de sortie réel peut être bien plus élevé que cette valeur.

kcps -- fréquence en Hz (doit être dans l'intervalle -sr/2 à sr/2).

kpw (facultatif) -- largeur de pulsation de l'onde carrée (imode = 2) ou caractéristiques de l'onde triangle ou rampe (imode = 4). Il n'est requis que pour ces formes d'onde et il est ignoré dans les autres cas. L'intervalle attendu va de 0 à 1, toutes les autres valeurs y étant ramenées cycliquement.

[Avertissement] Avertissement

kpw ne doit pas être une valeur entière exacte (0 ou 1) lors de la génération d'une onde en dent de scie / triangle / rampe (imode = 4). Dans ce cas, l'intervalle recommandé est d'environ 0,01 à 0,99. Cette limitation n'existe pas pour une forme d'onde carrée/PWM.

kphs (facultatif) -- phase de l'oscillateur (en fonction de imode, ce sera un paramètre facultatif de taux-i qui vaut zéro par défaut ou un paramètre obligatoire de taux-k). Comme pour kpw, l'intervalle attendu va de 0 à 1.

[Note] Note

Si l'on utilise un faible taux de contrôle, la largeur de pulsation (kpw) et la modulation de phase (kphs) sont converties en interne en modulation de fréquence. Cela permet un traitement plus rapide et réduit le nombre d'artefacts. Mais dans le cas de notes très longues avec des changements rapides et continus de kpw ou de kphs, la phase peut se décaler par rapport à la valeur voulue. Dans la plupart des cas, l'erreur de phase sera au maximum de 0,037 par heure (en supposant un taux d'échantillonnage de 44100 Hz).

Ceci pose problème principalement avec la largeur d'impulsion (kpw) par la possible apparition de divers artefacts. En attendant la résolution de ces problèmes dans de futures versions de vco2, les recommandations suivantes peuvent être utiles :

  • N'utiliser que des valeurs de kpw dans l'intervalle 0,05 à 0,95. (Il y a plus d'artefacts au voisinage des valeurs entières)

  • Essayer d'éviter de moduler kpw par des formes d'onde asymétriques telles que l'onde en dent de scie. Il est très peu probable qu'une modulation symétrique relativement lente (<= 20 Hz) (par exemple une onde sinus ou triangle), que des fonctions splines aléatoires (également lentes) ou qu'une pulsation de largeur fixe causent des problèmes de synchronisation.

  • Dans certains cas, l'ajout d'un tremblement aléatoire (par exemple, des fonctions spline avec une amplitude d'environ 0,01) à kpw peut aussi résoudre le problème.

Exemples

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

Exemple 1015. Exemple de l'opcode vco2.

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
; For Non-realtime ouput leave only the line below:
; -o vco2.wav -W ;;; for file output any platform
</CsOptions>
<CsInstruments>

sr      =  44100
ksmps   =  10
nchnls  =  1

; user defined waveform -1: trapezoid wave with default parameters (can be
; accessed at ftables starting from 10000)
itmp    ftgen 1, 0, 16384, 7, 0, 2048, 1, 4096, 1, 4096, -1, 4096, -1, 2048, 0
ift     vco2init -1, 10000, 0, 0, 0, 1
; user defined waveform -2: fixed table size (4096), number of partials
; multiplier is 1.02 (~238 tables)
itmp    ftgen 2, 0, 16384, 7, 1, 4095, 1, 1, -1, 4095, -1, 1, 0, 8192, 0
ift     vco2init -2, ift, 1.02, 4096, 4096, 2

        instr 1
kcps    expon p4, p3, p5                ; instr 1: basic vco2 example
a1      vco2 12000, kcps                ; (sawtooth wave with default
        out a1                          ; parameters)
        endin

        instr 2
kcps    expon p4, p3, p5                        ; instr 2:
kpw     linseg 0.1, p3/2, 0.9, p3/2, 0.1        ; PWM example
a1      vco2 10000, kcps, 2, kpw
        out a1
        endin

        instr 3
kcps    expon p4, p3, p5                ; instr 3: vco2 with user
a1      vco2 14000, kcps, 14            ; defined waveform (-1)
aenv    linseg 1, p3 - 0.1, 1, 0.1, 0   ; de-click envelope
        out a1 * aenv
        endin

        instr 4
kcps    expon p4, p3, p5                ; instr 4: vco2ft example,
kfn     vco2ft kcps, -2, 0.25           ; with user defined waveform
a1      oscilikt 12000, kcps, kfn       ; (-2), and sr/4 bandwidth
        out a1
        endin


</CsInstruments>
<CsScore>

i 1  0 3 20 2000
i 2  4 2 200 400
i 3  7 3 400 20
i 4 11 2 100 200

f 0 14

e


</CsScore>
</CsoundSynthesizer>


Voir aussi

vco, vco2ft, vco2ift et vco2init.

Crédits

Auteur : Istvan Varga

Nouveau dans la version 4.22