Annexe H. Csound double (64 bit) ou float (32 bit)

On peut construire Csound pour utiliser des nombres en virgule flottante DOUBLES sur 64 bit pour le traitement en interne au lieu des habituels nombres en virgule flottante FLOATS sur 32 bit. Cette plus grande précision pour le traitement interne produit un son bien plus "propre" mais au prix d'un temps de traitement plus long. Parce que csound met bien plus de temps pour ses calculs s'il a été compilé pour des doubles, il est utilisé typiquement en fin de travail pour produire la version finale d'une oeuvre. Si vous utilisez csound pour une sortie en temps réel, il vaut mieux utiliser une version 32 bit (float), qui fournit une sortie plus rapidement. Pour un rendu différé, vous pouvez utiliser l'une ou l'autre version, mais pour le master final, la version 64 bit produira une sortie de meilleure qualité.

La résolution choisie doit être la même que celle du type de variable des échantillons audio. Dans Csound "float" il s'agit de nombres en virgule flottante simple précision sur 32 bit. La mantisse occupe 24 bit. Dans Csound "double, il s'agit de nombres en virgule flottante double précision sur 64 bit.La mantisse occupe 52 bit. Chaque chiffre décimal nécessite 3 ou 4 bit. Ainsi, il y a une précision de 7 chiffres en "float" et de 16 chiffres en "double".

Pour chaque multiplication ou division, selon que les opérandes sont entiers, rationnels, décimaux périodiques ou irrationnels, le résultat peut présenter une erreur d'arrondi. S'il y a une erreur d'arrondi, il y a au plus une perte de précision d'un bit par opération (en plus des erreurs d'arrondi dues à la représentation binaire des nombres rationnels ou réels).

Pour les échantillons de type float, si le signal ne déborde pas la mantisse, le rapport signal-bruit vaut 6,02 fois 24, soit 144 dB. Au pire, chaque opération ajoutera 6,02 dB de bruit dû à l'erreur d'arrondi. Notre audition réagit à un ambitus dynamique effectif de 120 à 130 dB, mais nous apprécions que notre musique soit compressée dans un intervalle dynamique d'AU PLUS 60 dB (et habituellement beaucoup moins, disons 20 dB). Ceci nous donne (144 - 60) / 6,02 = environ 10 opérations défavorables avant que nous puissions entendre une dégradation. En pratique, nous pouvons enchaîner plusieurs fois ce nombre d'opérations avant d'entendre une dégradation ou du bruit.

Pour les échantillons de type double, si le signal ne déborde pas la mantisse, le rapport signal-bruit vaut 6,02 fois 52, soit 313 dB. Au pire, chaque opération ajoutera 6,02 dB de bruit dû à l'erreur d'arrondi. Ceci nous donne (313 - 60) / 6,02 = environ 42, en pratique plusieurs fois ce nombre d'opérations avant qu'il n'y ait une dégradation audible ou du bruit.

Mais si l'on relève le nombre d'opérations arithmétiques dans des instruments typiques de Csound ou d'autres synthétiseurs logiciels, les instruments très complexes entrent définitivement dans la zone des dégradations audibles sur de bons haut-parleurs avec float, et il n'est donc pas surprenant que dans certains cas, un test ABX à l'aveugle confirme des différences audibles occasionnelles entre de la musique synthétisée avec Csound "float" et la même musique synthétisée avec Csound "double". De même, il est courant de constater des différences audibles entre les implémentations numérique et analogique des mêmes algorithmes de synthèse.

Avec Csound double précision "l'espace de traitement numérique du signal" est nettement plus large, ce qui le rend plus adéquat pour toute musique dont l'écoute est critique. La version float ne devrait être utilisée que si son avantage en vitesse (environ 15 %) est critique pour l'exécution en temps réel.

Notes sur l'utilisation de Csound construit pour la double précision

  1. Les fichiers hetro, d'analyse PVOC-EX et pvanal générés pour Csound 32 bit (float) fonctionneront avec Csound 64 bit (double précision).

  2. Tous les autres formats d'analyse peuvent être générés de manière à être utilisés indifféremment entre les versions 32 et 64 bit et les architectures big-endian et little-endian, si l'option -X est utilisée pour la génération. L'ancien format de Csound5 est toujours générable mais il n'est pas indépendant des machines.