tablexkt

tablexkt — Lit des tables de fonction avec interpolation linéaire, cubique ou sinc.

Description

Lit des tables de fonction avec interpolation linéaire, cubique ou sinc.

Syntaxe

ares tablexkt xndx, kfn, kwarp, iwsize [, ixmode] [, ixoff] [, iwrap]

Initialisation

iwsize -- Ce paramètre contrôle le type d'interpolation à utiliser :

  • 2 : Interpolation linéaire. C'est la qualité la plus faible, mais aussi le mode le plus rapide.

  • 4 : Interpolation cubique. Qualité légèrement meilleure qu'avec iwsize = 2, au prix d'un traitement moins rapide.

  • 8 et au-dessus (jusqu'à 1024) : interpolation sinc avec une taille de fenêtre égale à iwsize (doit être un multiple entier de 4). Meilleure qualité que l'interpolation linéaire ou cubique, mais très lent. Lorsque l'on transpose vers le haut, on peut utiliser une valeur de kwarp supérieure à 1 pour un meilleur lissage (c'est encore plus lent).

ixmode (facultatif) -- mode d'indexation. La valeur par défaut est 0.

  • 0 : indices bruts

  • valeur différente de 0 : normalisé (0 à 1)

[Note] Notes

Si l'on utilise tablexkt pour reproduire des échantillons avec boucle (par exemple avec un indice de table généré par lphasor), il faut qu'il y ait au moins iwsize / 2 échantillons après la fin de la boucle pour l'interpolation, sinon il pourra y avoir des clics audibles (il doit y avoir aussi au moins iwsize / 2 échantillons avant le début de la boucle).

ixoff (facultatif) -- valeur de décalage de l'indice. Pour une table dont l'origine est au centre, il faut utiliser taille_table / 2 (indices bruts) ou 0.5 (indices normalisés). La valeur par défaut est 0.

iwrap (facultatif) -- indicateur de parcours cyclique des indices. La valeur par défaut est 0.

  • 0 : Pas de lecture cyclique (les indices < 0 sont ramenés à 0 ; les indices >= à la taille de la table (ou 1.0 en mode normalisé) restent bloqués sur le point de garde).

  • valeur différente de 0 : l'indice est replié dans l'intervalle autorisé (sans inclure le point de garde dans ce cas).

[Note] Note

iwrap s'applique aussi aux échantillons supplémentaires pour l'interpolation.

Exécution

ares -- sortie audio.

xndx -- index de la table.

kfn -- numéro de la table de fonction.

kwarp -- s'il est supérieur à 1, on utilise la fonction sin(x / kwarp) / x pour l'interpolation sinc au lieu de la fonction par défaut sin(x) / x. C'est utile pour lisser lorque l'on transpose vers le haut (kwarp doit être fixé au facteur de transposition dans ce cas, par exemple 2.0 pour une octave), cependant le rendu peut-être jusqu'à deux fois plus lent. De plus, iwsize doit valoir au moins kwarp * 8. Cette possibilité est expérimentale et pourra être améliorée à la fois en termes de vitesse et de qualité dans de nouvelles versions.

[Note] Note

kwarp n'a aucun effet s'il est inférieur ou égal à 1, ou si l'interpolation linéaire ou cubique est utilisée.

Exemples

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

Exemple 1075. Exemple de l'opcode tablexkt.

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
-odac           -iadc     ;;;RT audio I/O
; For Non-realtime ouput leave only the line below:
; -o tablexkt.wav -W ;;; for file output any platform
</CsOptions>

<CsInstruments>
;Example by Jonathan Murphy

  sr	    =  44100
  ksmps	    =  10
  nchnls    =  1

    instr 1

  ifn	    =  1    ; query f1 as to number of samples
  ilen	    =  nsamp(ifn)

  itrns	    =  4   ; transpose up 4 octaves
  ilps	    =  16  ; allow iwsize/2 samples at start
  ilpe	    =  ilen - 16   ; and at end
  imode	    =  3  ; loop forwards and backwards
  istrt	    =  16  ; start 16 samples into loop

  alphs	    lphasor   itrns, ilps, ilpe, imode, istrt
	; use lphasor as index
  andx	    =  alphs

  kfn	    =  1   ; read f1
  kwarp	    =  4 ; anti-aliasing, should be same value as itrns above
  iwsize    =  32  ; iwsize must be at least 8 * kwarp

  atab	    tablexkt  andx, kfn, kwarp, iwsize

  atab	    =  atab * 10000

	    out	      atab

    endin

</CsInstruments>

<CsScore>
f 1 0 262144 1 "beats.wav" 0 4 1
i1 0 60
e
</CsScore>

</CsoundSynthesizer>


Crédits

Auteur : Istvan Varga
Janvier 2002
Exemple par Jonathan Murphy 2006

Nouveau dans la version 4.18