Les nouveautés de Csound 6.08
Précédent | Préface | Suivant

## Les nouveautés de Csound 6.08

### Notes de parution de Csound 6.08 (novembre 2016)

Comme d'habitude, il y a un certain nombre de corrections et d'améliorations des opcodes, mais les changements les plus importants apparaissent dans les structures du langage. Tout d'abord, dans le langage de partition, la gestion des macros et le prétraitement ont été entièrement rénovés, pour s'aligner sur les mêmes fonctionnalités de l'orchestre. L'analyse de l'orchestre a reçu un certain nombre de corrections décrites ci-dessous.

Un changement majeur et pas complètement compatible a été opéré dans la lecture et l'écriture des éléments de tableau. Maintenant, le taux de l'indice détermine souvent le taux de traitement ; voir l'entrée Orchestre ci-dessous. Ceci simplifie pas mal de code et semble répondre aux attentes des utilisateurs ; le code précédent comportait plusieurs anomalies.

Il y a également de nouveaux opcodes, des corrections internes de fuites de mémoire et un code plus robuste.

- Nouveaux opcodes :

  - dct: Transformée en cosinus discrète d'un tableau d'échantillons (DCT-II)
  - getftargs: copie des arguments d'un gen dans une variable-S.
  - mfb: implante un banc de filtres mel-fréquence pour un tableau de magnitudes en entrée.

- Nouveaux GEN et macros :

  - quadbezier: génération de courbes de Bézier dans une table de fonction.

- Orchestre :

  - Le caractère ¬ est maintenant traité correctement comme variante de ~ pour la négation binaire.
  - Correction d'un bogue d'analyse lexicale qui pouvait altérer les chaînes de caractères.
  - Absence du symbole de nouvelle ligne garantie dans l'analyse lexicale.
  - Petite amélioration du report des numéros de ligne.
  - Vérification améliorée de la syntaxe des macros.
  - Analyse améliorée de l'affectation des étiquettes.
  - Prise en compte des erreurs de crochets non appairés dans la spécification des arguments pour les UDO.
  - Vérification qu'un fichier #included n'est pas un répertoire.
  - Meilleure gestion des appels de macros imbriqués sur plusieurs niveaux.
  - Pendant des années Csound fixait la fréquence du la médian à 440 Hz. Maintenant, cette fréquence peut être fixée dans l'en-tête par la nouvelle variable-r A4 et lue avec cette même variable.
  - L'exposant des valeurs en virgule flottante peut être écrit e ou E.
  - La sémantique de l'accès aux tableaux a été clarifiée :
    - i[i] => lecture à l'initialisation et pendant l'exécution, écriture seulement à l'initialisation.
    - i[k] => lecture pendant l'exécution, l'écriture génère une erreur d'exécution.
    - k[i], k[k] => lecture et écriture pendant l'exécution.
    - a[i], a[k] => lecture et écriture pendant l'exécution.
    - autres cas (S[], f[]) => lecture et écriture en fonction du type de l'indice (i,k).
    En particulier, i(k[i]) ne fonctionne toujours pas, mais le nouvel opérateur i(k[],i) prend en charge ce cas.
  - la validation de xout n'échoue plus lorsqu'une constante est fournie.

- Partition :

  - Nouveau code pour gérer les macros et les autres commandes de prétraitement. Aligne cette gestion sur le code de l'orchestre.
  - Nouvelle instruction de partition C introduite pour basculer du report inactif (C 0) au report actif (C 1, par défaut).

- Options :

  - Le tempo peut être fixé maintenant par une valeur en virgule flottante (auparavant, on ne pouvait utiliser que des valeurs entières).
  - Nouvelle option --version, affiche l'information de version et termine le programme.

- Opcodes et Gens modifiés :

  - Problèmes dans centroid corrigés.
  - Meilleur traitement de l'arrondi dans printks.
  - OSC étendu pour inclure la multidiffusion.
  - Les opcodes faust ont été mis à jour.
  - oscil1 et oscili peuvent prendre une durée négative.
  - la documentation de l'opcode fout a été clarifée.
  - La durée de relâchement de mxadsr a été corrigée.
  - L'opcode centroid accepte également un tableau en entrée.
  - Les opcodes ptable sont maintenant identiques à ceux de la famille table.
  - ftgen prend maintenant un tableau d'entrée en option.
  - subinstr peut maintenant avoir des arguments chaîne de caractères.
  - Le format i() peut maintenant aussi travailler sur des tableaux de taux-k, le premier argument étant un tableau, suivi par des indices.

- Utilités :

  - pvlook affiche maintenant explicitement le nom de la fenêtre d'analyse.

- Frontaux :

  - HTML5
    - csound.node : implanté pour linux, correction mineure de l'API.
    - pnacl : méthode compileCsdText ajoutée à l'objet csound.

- Usage général :

  - Test de la validité des noms de macro amélioré.
  - #undef corrigé.

- Bogues corrigés :

  - Corrections dans l'utilisation du format pour prints.
  - jitter2 retravaillé pour être plus conforme au manuel.
  - oscbank a reçu plusieurs corrections et fonctionne maintenant selon sa description.
  - bformdec1 avec tableaux et type 4 corrigé.
  - Bogues dans pvsceps corrigés.
  - Dans différents opcodes print, des caractères aléatoires étaient parfois ajoutés -- corrigé.
  - l'affectation de variables avec --sample-accurate pouvait donner des résultats inattendus ; il semble que ce soit corrigé maintenant.
  - La forme carrée du profil de padsynth a été corrigée et l'opcode est moins dépendant du niveau d'avertissements.
  - gen31 corrigé.
  - gen41 corrigé.
  - Bogue dans sensekey corrigé.
  - Plusieurs problèmes dans centroid corrigés.

- Changements système :

  - Nouvelle analyse lexicale et prétraitement de la partition.
  - Les fins de ligne dans le style MAC refonctionnent.
  - Les messages d'information système (taux d'échantillonnage, etc) sont maintenant dirigés sur stdout.
  - rtjack retravaillé pour la gestion des noms et des nombres.
  - L'affichage de la version comprend maintenant l'information de commit afin que les développeurs sachent quels patchs ont été appliqués.

- API :

  - La version de l'API est maintenant 4.0.
  - Les gens nommés sont maintenant supportés.
  - fterror est maintenant dans l'API.
  - Les fonctions SetOutput et GetOutputFormat ont été corrigées.
  - De nombreuses fonctions de l'API utilisent maintenant const si c'est approprié.
  - Les messages peuvent maintenant être redirigés depuis l'API vers stdout en utilisant l'attiribut CSOUNDMSG_STDOUT.
  - Nouvelles interfaces Lisp CFFI et FFI testées avec Steel Bank Common Lisp (architecture CPU 64 bit), exécutées dans un thread séparé.
  - ctcsound.py, une nouvelle interface FFI pour Python avait été introduite dans la version 6.07. C'est maintenant l'interface recommandée pour Python, csnd6.py étant obsolète.

- Changements sur les plates-formes :

  - Android.

    - les entrées et les sorties multicanaux sont permises.

  - Windows.

    - La bibliothèque d'importation csound64.lib a été ajoutée à l'installeur.

### Notes de parution de Csound 6.07 (mars 2016)

De nombreux bogues corrigés, dont certains importants, des éléments internes sont inclus, ainsi que de nouvelles fonctionnalités et extensions. Comme d'habitude, il y a aussi des améliotations du code.

- Nouveaux opcodes :

  - compress2: comme compress mais faisant un usage plus normal des dB (0.0 à pleine échelle).
  - (Expérimental, seulement dans le code source), nouveaux opcodes cuda : cudasynth2 et cudanal2.
  - directory : lit un répertoire et restitue une liste des noms de fichier dans un tableau de chaînes de caractères.
  - ftsamplebank : pour charger une bibliothèque d'échantillons depuis un répertoire.
  - mvclpf1, mvclpf2, mvclpf3, mvclpf4, mvchpf : simulation de filtres de Moog contrôlés en fréquence d'après Fons Andriaensen.
  - S(), convertit un nombre de taux-k ou de taux-i en une chaîne de caractères.
  - Opcode cepsinv pour calculer le cepstre inverse d'un tableau.
  - moogladder2 est plus rapide et moins précis que moogladder.
  - L'opcode paulstretch est une mise en oeuvre légère de l'algorithme d'étirement temporel PaulStretch par Nasca Octavian Paul. Il est idéal pour allonger la durée d'un signal dans de grandes proportions.
  - mp3scal implémente un traitement vocoder à verrouillage de phase à partir de fichiers mp3 sur disque, avec reéchantillonnage si nécessaire.
  - filescal implémente un traitement vocoder à verrouillage de phase à partir de fichiers sur disque, avec reéchantillonnage si nécessaire.

- Orchestre :

  - La construction booléenne ? .. : .. peut maintenant avoir un résultat de type chaîne de caractères, alors qu'auparavant elle n'autorisait que les nombres.
  - Le numéro de ligne rapporté lors de la détection d'une erreur à la fin d'une ligne est maintenant correct. Egalement des améliorations dans les numéros de ligne pour une syntaxe complexe.
  - Boucle while améliorée/corrigée.
  - Lecture des commentaires meilleure et consistante.
  - Lignes de continuation mieux gérées, spécialement par le respect des numéros de ligne.
  - opcode : S(.) syntaxe maintenant permise.

- Partition :

  - La liste des points de tempo dans l'opcode de partition t est maintenant arbitrairement longue.
  - Une incohérence dans les opcodes r et { a été corrigée.

- Options :

  - L'option -z supprime maintenant les opcodes obsolètes, sauf si on lui donne comme argument 2 ou 3.
  - La nouvelle option --fftlib détermine la bibliothèque de TFR réelle à utiliser en interne (FFTLIB = 0, PFFFT = 1, vDSP = 2).

- Opcodes et Gens modifiés :

  - Dans les opcodes OSC on peut maintenant envoyer et recevoir des tableaux, des tables et de l'audio.
  - Meilleur diagnostic si diskin2 échoue.
  - rezzy détecte maintenant une instabilité du filtre et le modifie vers une version stable.
  - adsr a été réécrit pour lever une erreur si la longueur des segments dépasse p3.
  - L'utilisation de diskin vers un tableau redimensionne le tableau de sortie si nécessaire.
  - chnget teste maintenant un changement de nom de canal comme de type de données.
  - interp peut prendre un argument facultatif supplémentaire pour donner une valeur initiale.
  - oscilikts utilise une lecture de table plus permissive.
  - L'opcode in peut lire en mono ou en stéréo, évitant ainsi la distinction in/ins.
  - sensekey a été réécrit pour fournir de meilleurs diagnostics et corriger un bogue mineur.
  - Correction d'un cas de définition de macro avec des arguments.
  - sockrecv now works at a and k rate.
  - GEN49 travaille maintenant depuis un appel de ftgen.
  - GEN34 est plus tolérant dans les tables qu'il accepte.
  - chnget autorise maintenant le changement des noms de canal pendant l'exécution.
  - iceps renommé cepsinv pour éviter les conflits.
  - Support du mp3 amélioré sur plusieur petits détails.
  - Petite correction pour autoriser le rechargement d'un greffon lapsda par l'hôte.

- Frontaux :

  - csdebugger :

    - Quelques problèmes de mémoire réglés.

  - HTML5 :

    - CsoundQT a maintenant ses propres notes à https://github.com/CsoundQt/CsoundQt/blob/develop/release_notes/Release%20Notes%200.9.2.1.md.

- Usage général :

  - Les options multicoeur ont été améliorées.
  - Lors du remplacement d'instruments, la nouvelle version hérite de maxalloc et des options actives.
  - Le code multicoeur fonctionne maintenant avec des instruments MIDI.
  - Les opérations MIDI sont maintenant disponibles via le module jack rtmidi (-+rtmidi=jack).

- Bogues corrigés :

  - Correction de trigseq.
  - Une erreur majeure dans rezzy a été corrigée.
  - p() a été corrigé pour un grand nombres de p-arguments.
  - p() fonctionne maintenant avec les évènements MIDI.
  - Le générateur de nombres aléatoire de 31 bit pouvait produire une boucle très courte s'il était initialisé avec zéro ; corrigé.
  - Les macros dans les fichiers .orc fonctionnent maintenant.
  - Un bogue très ancien dans l'affichage de graphes a été corrigé.
  - Corrections dans les opcodes d'enveloppe linen, expsegr, linsegr, cossegr, transegr, envlpx, comprenant de nouveaux avertissements.
  - De nombreuses corrections dans les opcodes de chaîne de caractères (strsub, strcpy et d'autres).
  - Bogues corrigés dans les formats d'impression (sprintf, printf, prints).
  - Il manquait une initialisation à pvsmooth.
  - L'initialisation des tableaux est maintenant plus robuste.
  - Bogue corrigé dans copya2ftab.
  - Correction dans cudapvsanal (EXPERIMENTAL).
  - partikkel corrigé pour le placement de grain de sous-échantillon.
  - Les opcodes nécessitant un nombre impair d'arguments sont maintenant testés proprement.
  - pvswrite tient maintenant compte correctement de 0dbfs.
  - GEN34 autorise maintenant les tables sources de longueur différente d'une puissance de deux.
  - vst4cs fonctionne maintenant sur architecture 64 bit.
  - strcat réparé.
  - nstance réparé.
  - Petits défauts corrigés dans le module rtauhal.
  - L'installeur pour Windows sur architecture CPU 64 bit fixe maintenant correctement les variables d'environnement au niveau système comme il se doit.
  - transeg au taux-k avec itype différent de zéro avait un retard initial d'un cycle.
  - Fonction log pour les tableaux corrigée.
  - Pondération des GENs nommés corrigée.
  - Une erreur de terminaison dans la lecture des fichiers ATS était supposée corrigée ; elle générait de fausses erreurs indiquant trop tôt la fin de fichier.
  - Erreur d'initialisation dans pvbandp corrigée.
  - Allocation de chaîne de caractères dans readfi corrigée.

- Changements système :

  - Utilisation intensive de fichiers en mémoire. Les fichiers .orc et .sco sont toujours traités ainsi, de même que .csound6rc. Cela simplifie grandement le fonctionnement interne.
  - Les longjmps imbriqués ont été corrigés, ce qui affectait certaines utilisations de l'API.
  - Si un fichier .csd qui n'existe pas est présenté, Csound ne plante plus.
  - La valeur kcounter est maintenant une valeur consistante non-signée sur 64 bit, ce qui permet de longues exécutions.

- API :

  - csoundCompileCsdText : nouvelle fonction pour compiler un CSD depuis un texte sous forme de chaîne de caractères.
  - L'appel de fonction csound->GetKcounter(csound) retourne maintenant un entier non-signé sur 64 bit. Auparavant, il retournait un entier long ce qui n'était pas clair.
  - ctcsound.py est un nouveau fichier de liaison entre le langage Python et l'API de Csound. C'est un fichier en pure Python qui utilise le module FFI (Foreign Function Interface) ctypes. Il ne dépend pas de Swig, et il fonctionne aussi bien avec Python2 qu'avec Python3. Il utilise numpy pour ses structures de données, numpy était le paquet fondamental du calcul scientifique avec Python.

- Changements sur les plates-formes :

  - Windows.

    - L'installeur de Csound pour Windows contient maintenant tous les exécutables construits pour une architecture CPU 64 bit.
    - L'installeur pour Windows sur architecture CPU 64 bit fournit maintenant un NW.js fonctionnel. Il exécute toutes les fonctionnalités de Csound ainsi que celles d'HTML5 dans un runtime semblable à un navigateur avec le langage JavaScript, et il comprend un éditeur Csound implémenté en HTML. L'éditeur exécute des pièces sous forme de fichiers .csd incluant une balise <html> ou sous forme de fichiers .html appelant l'objet csound, et il fournit des fonctions de débogage de JavaScript.
    - Un nouveau système simplifié se trouve dans le répertoire csound/mingw64 pour construire Csound à l'aide de la suite d'outils MSYS2/mingw64.
    - Le lien avec pthreads et d'autres bibliothèques est maintenant statique.
    - Support limité des caractères non ASCII dans les noms de fichier.
    - L'installeur pour Windows fournit maintenant Csound et tous ses composants, interfaces, greffons, utilitaires et frontaux pour une architecture de CPU sur 64 bit, compilés en utilisant la suite MSYS2/Mingw64-w64. CsoundQt et csound.node sont construits avec MSVC 2013.

  - OSX.

    - Installeur corrigé pour les noms de liens pour _csnd6 et _CsoundAC.

  - GNU/Linux.

    - L'opcode date est plus précis.

### Notes de parution de Csound 6.06 (septembre 2015)

De nombreux bogues, certains assez importants, ont été corrigés et de nouvelles facilités et extensions ont été ajoutées.

- Nouveau opcodes :

  - getseed lit l'état du générateur PRN à l'opposé de l'opcode seed.
  - tabifd — Distribution de Fréquence Instantanée, analyse en phase et magnitude.
  - websocket — Lecture et écriture de signaux et de tableaux au moyen d'une connexion websocket.
  - framebuffer — Lit des signaux audio dans des tableaux unidimensionnels de taux-k et vice-versa avec une taille de tampon spécifiée.
  - olabuffer — additionne des trames audio tuilées dans des tableaux de taux-k et retourne un signal audio.

- Orchestre :

  - Les étiquettent sont permises dans l'instrument 0.

- Partition :

  - La taille maximale des chaînes de caractères dans les partitions a été augmentée à 1024.

- Opcodes et Gens modifiés :

  - La version tableau de diskin2 utilise la taille du tableau pour donner le nombre de canaux dans le format de fichier brut.
  - Le paramètre kpitch de diskin2 vaut 1 par défaut pour les utilisations simples.
  - La f-table de vibrato dans wgflute et dans wgcar est facultative, étant définie par défaut sur une onde sinus.
  - schedule accepte maintenant les arguments chaîne de caractères.
  - urandom est maintenant disponible sur les plates-formes OSX.
  - GEN18 avait un problème de délimitations ; réécriture importante.
  - Dans la famille des opcodes poscil il est possible de passer la phase d'initialisation.
  - svfilter peut maintenant passer l'initialisation.
  - Lors de l'ouverture d'un fichier d'entrée, nchncls_i est utilisé à la place de nchnls. C'est un changement qui aurait du suivre l'existence de nchnls_i.
  - Le module rtjack rapporte maintenant le taux d'échantillonnage.
  - Les opcodes rfft, rifft, fft, fftinv, r2c et c2r ont maintenant des versions de taux-i.
  - Nouveau paramètre facultatif de seuil dans les opcodes tradsyn, sinsyn et resyn.
  - Nouvelle option de seuil pour partiels.

- Utilités :

  - L'extraction a été corrigée.
  - src_conv a été amélioré et intégré dans les options -U.
  - Corrections dans atsa et heti.

- Frontaux :

  - pnacl :

    - Support du taux d'échantillonnage fixe de 48000 Hz.

  - csound~ :

    - Changements dans le système de processus légers. L'initialisation du canal de chaînes de caractères a été corrigée. D'autres bogues ont également été corrigés.

  - Emscripten :

    - L'objet Javascript Csound peut maintenant recevoir des données de l'opcode outvalue.

  - HTML5 :

    - Integration d'HTML, de JavaScript et d'autres éléments d'HTML5 dans Csound, soit en insérant une page web comme élément <html> dans un fichier CSD pour CsoundQt ou Csound pour Android, soit en intégrant Csound dans le contexte JavaScript d'un navigateur web autonome (Emscripten, PNaCl) ou embarqué (csound.node).

- Utilisation générale :

  - Les macros malformées dans un orchestre sont maintenant interceptées.

- Bogues corrigés :

  - L'utilisation de variables d'environnement dans le style de Windows pour INCDIR, etc, fonctionnent maintenant avec les numéros de périphériques.
  - Opcode vibrato corrigé.
  - Les clics en cas d'échantillonnage de précision en temps réels ont été corrigés.
  - La copie de chaînes de caractères est maintenant correcte ; il y avait parfois des erreurs mémoire.
  - Boque dans pvstanal a été corrigé.
  - Erreur d'arrondi dans cpspch corrigée.
  - Plus de plantage lors de la recompilation d'un instrument nommé.
  - Correction du bogue d'interpolation dans tablexkt.
  - Correction dans plltrack lorsque ksmps vaut 1.

- Changements système :

  - Le message d'erreur du greffon STK est maintenant un avertissement.

- API :

  - Correction de la redéfinition des opcodes et des UDOs.

- Changements sur les plates-formes :

  - OSX.

    - Le lien sur csnd6.jar a été installé au bon endroit.
    - Les problèmes de liaison avec Java JNI sont résolus.
    - Le nom du lien pour libpng dans libfltk_image a été corrigé.

### Notes de parution de Csound 6.05 (Avril 2015)

Comme toujours il y a de nouvelles facilités et de nombreuses corrections de bogues. Une grande partie de cette livraison consiste en la suppression de nombreuses fuites et de saturation de mémoire. Naturellement ces changements ne sont pas très visibles à part une empreinte mémoire moindre. Noter que nous traitons les bogues et les demandes d'amélioration via le system de questions de github, et celles-ci ont grandement affecté cette parution.

- Opcodes :

  - L'opcode sndload est maintenant obsolète.

- Nouveaux Gens et Macros :

  - L'algorithme padsynth de Paul Octavian Nasca a été implanté sous la forme d'un gen.

- Partition :

  - Le bogue du calcul de la position d'une chaîne de caractères lors du traitement des lignes d'une partition a été corrigé [fixes #443]

- Options :

  - Une option de copyright au format court est disponible avec un nombre fixe de licences connues (CC, etc)
  - Nouvelle option de ligne de commande pour rapporter les périphériques MIDI dans un format simple.
  - Nouvelle option de ligne de commande pour fixer ksmps.

- Opcodes et Gens modifiés :

  - adsynt gère mieux les changements d'amplitude.
  - sfont détecte mieux les défauts.
  - Meilleure vérification des fréquences hors-limites dans les modèles physiques.
  - ftgenonce et d'autres acceptent les paramètres chaînes de caractères.
  - gausstrig a été retravaillé et étendu avec de nouvelles caractétistiques.
  - La fonction p() ne donne plus d'avertissement de dépassement de pcnt.
  - Correction de midirecv
  - Le nettoyage de fin d'utilisation d'OSCsend a été amélioré.
  - fillarray est limité à des tableaux à 1 ou 2 dimensions ; en fait, auparavant, il échouait silencieusement pour les dimensions supérieures ou égales à 3.
  - oscbnk fonctionne maintenant lorsque l'égaliseur est utilisé.
  - mp3in fonctionne maintenant avec des fichiers mono et stéréo.
  - flooper & flooper2 acceptent maintenant les tables stéréo.
  - La phase de relâchement d'expsegr a été corrigée.
  - Les f-tables crées avec un grand nombre d'arguments pouvaient saturer la mémoire ; c'est corrigé maintenant.
  - L'exécution de plltrack a été améliorée.
  - L'initialisation des tableaux a été clarifiée et testée.
  - gen23 a été corrigé pour stopper une boucle infinie.
  - alwayson démarre maintenant depuis le décalage de la partition ; cela fait partie de la correction d'un problème ancien avec alwayson dans CsoundVST
  - invalue teste dorénavant la taille de chaîne de caractères en sortie et réalloue de la mémoire si elle est inférieure à la taille par défaut (fixée à 256 octets pour une compatibité ascendante)

- Utilitaires :

  - L'utilitaire srconv a été amélioré mais il ne fonctionne pas très bien, avec des passages bruiteux dans une sortie correcte. Nous recommandons l'utilisation du code Secret Rabbit de Erik de Castro Lopo (libsamplerate) qui produit une conversion du taux d'échantillonnage de grande qualité. srconv sera supprimé prochainement pour un remplacement possible par un utilitaire basé sur SRC.

- Frontaux :

  - pnacl

    - Ajout d'une interface permettant l'utilisation du système d'entrée MIDI de Csound.
    - L'entrée audio est conforme à la dernière spécification de l'API Pepper.

- Bogues corrigés :

  - Bogues corrigés dans fastabi,oscktp, phasorbnk, adsr, xadsr, hrtfer.
  - Bogues corrigés dans harmon. harmon2, harmon3 et harmon4.
  - Csound pouvait planter après une erreur d'analyse ; ce cas est maintenant supprimé.

- Changements système :

  - Il y a de nouveaux tests sur la concordance des types de xin/xout avec leur définition dans un UDO.
  - Jack a maintenant un timeout.

- Changements internes :

  - Plusieurs défauts trouvés par coverity ont été corrigés ou le code changé. Cela devrait renforcer Csound dans les cas limites.
  - Des changements du parser simplifient l'allocation des variables temporaires, avec de nouvelles optimisations.
  - Le code du rendu multi-thread a été amélioré et stabilisé quant à la redéfinition des instruments.

- Changements sur les plates-formes :

  - iOS.

    - La fonction de rappel audio a été corrigée pour fonctionner correctement avec la sortie lumineuse et la TV Apple.

  - Android.

    - Nouveau mode d'E/S audio expérimental : csoundPerformKsmps() est appelée depuis la fonction de rappel de l'E/S OpenSL. On peut activer ce mode facultativement en passant une valeur "false" au second paramètre du nouveau constructeur de CsoundObj (bool isAsync). Le constructeur par défaut et celui à un paramètre fixent cette valeur à "true" (ce qui permet une compatibilité ascendante avec le code existant).
    - The OSC opcodes are included in distribution.

    - App Android

      - Il y a de nouvelles boîtes de dialogue pour l'ouverture et la sauvegarde de fichier qui permettent d'accéder à une carte SD, si l'appareil en est équipé, en plus du stockage interne.
      - Un nouveau bouton "Save as..." permettant de sauvegarder le csd comme un nouveau fichier avec un nouveau nom.
      - De nombreux exemples de l'archive Android sont maintenant construits dans l'application et peuvent être lancés depuis le menu.
      - Inclue maintenant l'opcode exciter.

  - OSX.

    - L'installation place maintenant csladspa.so au lieu de csladspa.dylib sur le disque.

  - Linux.

    - La version Linux est maintenant construite sans les threads FLTK. Cela supprime les gels du système et est conforme aux autres distributions.

### Notes de parution de Csound 6.04 (novembre 2014)

Cette nouvelle version comprend de nombreuses extensions et corrections ; de nouveaux opcodes et un nombre important de réorganisations internes. Il y a un nouveau frontal et les versions iOS et Android présentent de nombreuses améliorations.

Nous suivons les bogues et les demandes d'amélioration via le système de signalement de github. Des propositions pour la parution suivante sont déjà faites, mais la quantité de changements impose une parution dès maintenant.

- Nouveaux opcodes :

  - pinker génère du bruit rose de grande qualité.
  - L'opcode power ^ fonctionne maintenant avec des arguments de type tableau.
  - L'opcode exciter est calqué sur le greffon calf.
  - L'opcode vactrol simule un suiveur d'enveloppe analogique.
  - Famille d'opcodes hdf5 pour gérer le format de fichiers hdf5.
  - (expérimental non documenté) l'opcode buchla modélise le filtre lowgate de Buchla.
  - De nouveaux opcodes de taux-k agissant sur les tableaux :
    - transformées: rfft, rifft, fft, fftinv
    - produit complexe : complxprod
    - conversion polaire - rectangulaire : rect2pol, pol2rect, mags, phs
    - reél - complexe: r2c, c2r
    - fenêtrage : window
    - cepstrum : pvscpes, iceps, ceps
    - accès colonne / ligne : getrow, getcol, setrow, setcol
    - copie données de taux-a - tableau de taux-k : shiftin, shiftout
    - déroulement de phase : unwrap

- Nouveaux Gens et Macros :

  - Numéros de ligne corrigés dans les instructions d'instr.
  - Nouvelle opération de contrôle, la boucle while.
  - Un bogue ancien sur les macros qui utilisaient le même nom pour un argument a été corrigé.
  - La redéfinition d'un instrument lors d'un appel unique au compilateur est signalé comme une erreur.
  - Le saut de l'en-tête ID3 des fichiers mp3 est maintenant correctement impléménté.
  - Les erreurs dues à la non-définition de l'endroit où se trouvent les fichiers d'onde bruts de STK ont été supprimées.
  - Un bogue qui empêchait les UDO de lire une chaîne de caractères dans un p-champ a été corrigé.

- Opcodes et Gens modifiés :

  - Les opcodes de manipulation de pile sont obsolètes.
  - lenarray étendu pour la gestion des tableaux multi-dimentisonnels.
  - ftgenonce accepte correctement les arguments chaîne de caractères.
  - max et min ont maintenant une version de taux-i.
  - gen23 amélioré au vu des commentaires et des problèmes rapportés.
  - Dans OSCsend le port est maintenant une valeur de taux-k.
  - socksend travaille maintenant au taux-k.
  - Plusieurs opcodes générateurs d'enveloppe sont maintenant corrects en mode de précision à l'échantillon.
  - La compilation faust est maintenant protégée par un verrou.
  - mp3 a été modifié pour permettre son utilisation avec reinit.
  - Dans les opcodes de contrôle à distance, la nom du réseau peut être fixé via la variable d'environnement CS_NETWORK. Vaut par défaut en0 (OSX) ou eth0.

- Frontaux :

  - icsound : le nouveau frontal icsound est maintenant prêt pour tout usage. icsound est une interface Python pour un usage interactif avec le notebook ipython.
  - csdebugger : plusieurs changements et amélorations ont été faits, comme un parcours pas à pas des instruments actifs, une meilleure utlisation des numéros de ligne.

- Usage général :

  - Le module Jack ne stoppe plus Csound en cas d'échec de la connexion automatique.

- Bogues corrigés :

  - atsinnoi corrigé.
  - ftsavek corrigé.
  - sprintf corrigé.
  - Correction de gen27, en particulier avec de nombreux arguments, ainsi que de nombreuses erreurs dans les arguments de partition en grand nombre.
  - Les opcodes Physem (guiro cabasa, sekere) corrigés pour qu'un second appel fonctionne.
  - flooper corrigé dans le mode 2.
  - OSCsend, plusieurs corrections.
  - UDO corrigé pour le cas d'un ksmps local égal à 1.
  - D'autres changements et corrections au code dssi.
  - xscanu et scanu corrigés.
  - temposcal et mincer corrigés.
  - Le plantage dans ftload a été corrigé.

- Changements système :

  - En mode serveur la sortie se fait maintenant proprement.
  - Corrections dans le module rtalsa.
  - Corrections dans le module temps réel de pulseaudio.
  - Correction pour enlever les entrées de fluidEngine d'une instance de Csound (empêche le plantage dans moduleDestroy).
  - Les opcodes appelés en tant que fonction qui retournaient des tableaux ne synthétisaient pas correctement les arguments en types tableau parce qu'ils ne convertissaient pas le spécificateur de l'argument au format interne.
  - Correction du plantage durant la phase d'initialisation de notes liées à cause du code sauté par le goto.
  - Correction de l'initialisation erronée des p-champs lorqu'ils étaient moins nombreux que ce que l'instrument attendait (décalage d'un p-champ).

- Changements internes :

  - Ajout de l'identification de type à l'exécution pour les variables d'instrument ; on utilise plus XINCODE/XOUTCO.
  - Correction de l'analyse des nombres négatifs pour la taille de malloc et gestion améliorée des nombres négatifs.
  - L'écriture dans circularBuffer est maintenant atomique.
  - Plusieurs fuites de mémoire et des codes potentiellement dangereux ont été corrigés.
  - L'inférence de type a été considérablement retravaillée ainsi que certaines zones du parseur.

- API :

  - Nouvelle fonction de l'API pour retrouver les paramètres GEN utilisés lors de la création d'une table.

- Changement sur les plates-formes :

  - iOS :

    - API refactorisée pour avoir des noms de méthode et d'abstraction plus clairs (par exemple CsoundBinding au lieu de CsoundValueCacheable).
    - Nettoyage du code obsolète.
    - Le code a été significativement retravaillé.

  - Android :

    - API refactorisée pour avoir des noms de méthode et d'abstraction plus clairs (par exemple CsoundBinding au lieu de CsoundValueCacheable).
    - Changements pour permettre d'avoir HTML 5 avec JavaScript, et WebGL si possible, dans l'app Android Csound6.
    - Changement d'orientation de l'écran dans l'app Csound6 sans avoir à redémarrer l'app.
    - Stockage local (utile pour sauvegarder et restaurer les valeurs des widgets, etc.)

  - Windows :

    - Correction de l'arithmétique des pointeurs qui causait un plantage sous Windows.
    - pyexec a été modifié pour utiliser les fontions d'ouverture de fichier de Python afin d'éviter un plantage sous Windows.

  - OSX :

    - CsoundAC est compilé maintenant.

  - Linux :

    - Bogues de threadlocks corrigés sous linux.

### Notes de parution de Csound 6.03 (mai 2014)

Cette nouvelle version corrige de nombreux bogues, comprenant la résolution de tickets sur SourceForge et sur GitHub. Elle apporte également des changements internes pour améliorer l'exécution.

- Nouveaux opcodes :

  - prinks2 affiche une nouvelle valeur chaque fois qu'une variable de contrôle change avec une syntaxe de formatage à la printf()
  - mp3sr, mp3bitrate et mp3nchnls pour obtenir de l'information sur les fichiers mp3
  - EXPERIMENTAL : les opcodes CUDA pour la convolution partitionnée, la convolution directe et le vocodeur de phase : opcode OpenCl pour la synthèse additive
  - compilecsd pour compiler des instruments à partir d'un fichier CSD standard

- Orchestre :

  - i() attendait comme argument une variable pas une expression. C'est maintenant la norme. (bug #90)

- Partition :

  - Nouvelle instruction de partition y fixant la graine de random (pour ~) durant la lecture

- Options :

  - Il y avait un bogue dans CsOptions ; le dernier argument n'était pas lu (issue #296)
  - Les options de ligne de commande expression-opt et no-expression-opt n'ayant plus d'usage dans Csound6, un avertissement est affiché

- Opcodes et Gens modifiés :

  - Il est possible de spécifier pour la sortie ogg une qualité VBR (taux de bloc variable)
  - Le code de dssi4cs a été entièrement retravaillé pour éviter de potentielles fautes de mémoire
  - Plusieurs opérations de tableaux sont désormais disponibles au taux-i ainsi qu'au taux-k
  - fillarray fonctionne avec les tableaux de chaînes de caractères
  - L'affichage des TFR (via dispfft) a été amélioré avec des options de mise à l'échelle et de zoom
  - Les opcodes de graphe de fluence fonctionnent maintenant avec des signaux tableaux de taux-a
  - Dans le code alsa TR, le taux d'échantillonnage provient du périphérique
  - Le système d'opcodes Faust a été mis à jour par rapport à la dernière API de Faust

- Utilitaires :

  - Bogue corrigé dans lpanal

- csound~ :

  - OSX - correctif pour l'exécution avec une architecture à cpu 32 bit
  - Windows - csound~ est maintenant disponible sous Windows

- Emscripten :

  - Intégré désormais dans la base de code

- Utilisation générale :

  - --displays active maintenant le mode graphique comme prévu
  - Nouvelle option de ligne de commande --get-system-sr pour obtenir le taux d'échantillonnage de la machine
  - Nouvelle option de ligne de commande --devices[=in|out] qui donne une liste des périphériques audio disponibles puis termine le programme

- Bogues corrigés :

  - Lorsqu'une table était remplacée sa taille ne changeait pas
  - Plusieurs bogues dans --sample-accurate ont été repérés et corrigés. Cela concerne en particulier les opcodes out, outn et line
  - Plusieurs bogues dans grain3 ont été corrigés
  - Un bogue de str_chanel pouvait provoquer un plantage
  - Petit défaut dans rtjack
  - Une erreur dans l'opcode resize a été corrigée
  - Un bogue aléatoire a été corrigé dans atsa
  - Problème de pause dans rtauhal corrigé
  - Plusieurs bogues/maladresses corrigés dans GEN23
  - Test des bornes des tableaux corrigé
  - Les canaux de chaînes de caractères n'étaient pas correctement réglés pour les chaînes de taille variable
  - L'allocation mémoire pour le formatage de chaîne dans printfsk a été corrigée, supprimant ainsi le troncage de chaîne
  - strcat protégé contre la surcapacité
  - une erreur dans la compilation des tableaux a été corrigée (problème #293)
  - Correction de GetPvsChannel contre un plantage

- Changements système :

  - L'opcode turnoff vérifie maintenant que l'instrument affecé est actif
  - lenarray accepte n'importe quel type de tableau
  - la manière d'arrondir un numéro de table a été modifiée pour un comportement plus prévisible
  - on peut avoir une nouvelle section dans un fichier csd nommée <CsFile...> qui est semblable à csFileB mais avec un texte non encodé
  - La compilation des UDO utilise maintenant le système de types. Les UDOs peuvent ainsi utiliser n'importe quel type de tableau
  - Analyse de l'orchestre plus rapide grâce à de meilleurs algorithmes

- Changements internes :

  - Tout le système a été testé avec l'outil d'analyse statique Coverity qui a identifié plusieur problèmes (mineurs pour la plupart). Ceux-ci ont été traités et vérifiés. En particulier, une meilleure utilisation de l'impression et de la copie de chaîne devrait permettre d'éviter les dépassements de capacité
  - Le système de types et de variables a été entièrement réécrit ; cela a permis un meilleur support des tableaux et des UDOs
  - L'alignement des variables est maintenant correct dans tous les cas
  - La copie de tableau utilise maintenant le système de types pour copier les valeurs ; cela règle les problèmes de copie des tableaux de chaînes de caractères, de f-sigs, etc
  - Csound est réinitialisé lorsqu'il s'arrête restant ainsi dans un état propre ; ce n'était pas le cas lors d'une erreur de compilation si bien que le démarrage suivant ce faisait avec un moteur de Csound invalide (problème #305)

- API :

  - Tous les opcodes, etc, utilisent maintenant les opérations d'allocation de mémoire de l'API, ce qui permet de remplacer complétement l'allocateur de mémoire
  - csoundCompileCsd a été ajouté à l'API et associé avec le nouvel opcode compilecsd
  - csoundGetStringChannel est protégé contre les chaînes courtes ou nulles et un test de la longueur de chaîne a été ajouté
  - Dans plusieurs fonctions de l'API char* a été remplacé par const char* conformément à l'usage

  Le moteur d'exécution a maintenant des capacités de débogage permettant l'interruption de l'exécution et l'inspection de l'état du moteur et des variables d'instrument. Les fonctions suivantes sont disponibles en incluant l'en-tête csdebug.h :

      void csoundDebuggerInit (CSOUND *csound);
      void csoundDebuggerClean (CSOUND *csound);
      void csoundSetInstrumentBreakpoint (CSOUND *csound, MYFLT instr, int skip);
      void csoundRemoveInstrumentBreakpoint (CSOUND *csound, MYFLT instr);
      void csoundClearBreakpoints (CSOUND *csound);
      void csoundSetBreakpointCallback (CSOUND *csound, breakpoint_cb_t bkpt_cb, void *userdata);
      void csoundDebugContinue (CSOUND *csound);
      void csoundDebugStop (CSOUND *csound);
      debug_instr_t *csoundDebugGetInstrInstances(CSOUND *csound);
      void csoundDebugFreeInstrInstances(CSOUND *csound, debug_instr_t *instr);
      debug_variable_t *csoundDebugGetVariables(CSOUND *csound, debug_instr_t *instr);
      void csoundDebugFreeVariables(CSOUND *csound, debug_variable_t *varHead);

- Windows:

  - Soundfonts dans Windows avait un problème d'alignement interne qui a été corrigé

### Notes de parution de Csound 6.02

Cette nouvelle version comporte de nombreuses corrections de bogues (y compris la résolution générale de tous les tickets sur SourceForge). Elle introduit aussi quelques nouvelles facilités telles qu'un serveur, du code pour exécuter Csound dans un navigateur et une large généralisation des opcodes de filtre pour les doter de paramètres modifiables au taux audio.

- Nouveaux opcodes :

  - L'opcode nstance produit une nouvelle instance d'un instrument et mémorise le descripteur de cette instance.
  - L'opcode turnoff nouvelle variante pour arrêter une instance d'un instrument donné.
  - strfromurl pour remplir une chaîne de caractères à partir d'une URL.

- Orchestre :

  - Si la construction de Csound le permet, une chaîne intégrée avec #include peut être une URL ou un fichier.
  - Il est à nouveau permis d'insérer un espace entre le nom d'une fonction et la parenthèse ouvrante pour toutes les fonctions valables dans Csound5 (mais pas en général).
  - La commande Csound peut démarrer avec un CSD vide en mode démon (--daemon): ne quitte pas si le CSD/orchestre n'est pas donné, est vide ou ne compile pas).

- Partition :

  - Si la construction de Csound le permet, une chaîne intégrée avec #include peut être une URL ou un fichier.

- Opcodes et Gens modifiés :

  - Plusieurs filtres ont été modifiés pour accepter des paramètres de taux-k ou de taux-a. En particulier, les filtres suivants sont concernés :

    areson | atonex
    butterworth filters | fofilter
    lowres | lowresx
    lpf18 | mode
    moogladder | moogvcf
    reson | resonr
    resonx | resonz
    statevar | tonex

  - Le nombre maximum de presets dans sfont a été augmenté à 16384.
  - cpsmidinn est désormais plus précis.
  - Le comportement de max_k suit maintenant la documentation. Dans certains cas les résultats étaient bizarres.
  - Les opcodes vst4cs ont été réécrits. Le code FLTK a été encapsulé. Le système de construction a été mis à jour pour Csound 6.
  - Dans l'opcode alwayson, modifications pour une meilleure gestion des p-champs et une insertion plus fiable d'une instance d'instrument pour répéter ou redémarrer des sections de partition.
  - On a remplacé dans les opcodes de graphe de fluence la bibliothèque multithread OpenMP par pthreads, ce qui permet une initialisation en une passe des structures statiques.

- Frontaux :

  - PNaCl est maintenant supporté comme plateforme, ce qui permet d'exécuter Csound dans le navigateur Chrome sur tous les systèmes d'exploitation qui l'acceptent.

- Bogues corrigés :

  - Opcode adsynt2.
  - Opcode ftgentmpd.
  - Opcode dates.
  - Opcode pvsfilter.
  - Sortie stéréo de temposcal et de mincer.
  - Opcode pan2.
  - Dépassement d'indice dans randh et dans randi.
  - Plusieurs corrections dans CsoundVST : initialisation, gestion de la partition et initialisation du pilote MIDI, ce qui le rend fonctionnel dans Csound 6.
  - pycalln s'il n'y a pas d'entrée.
  - correction/révision des réglages de ksmps et de kr dans les UDOs.
  - correction du problème d'envoi d'un message de partition de max vers csound via csound~ (Ticket 58).
  - lorsque itype dans chn_k était fixé à 3 et que les valeurs étaient inférieures à 1, Csound6 produisait une erreur INIT. (Ticket 67).
  - Plusieurs erreurs de segmentation qui avaient été rapportées ont été traitées.
  - l'opcode xtratim utilisait une valeur de ekr incorrecte venant de csound au lieu d'une instance ; l'utilisation de cet opcode conjointement avec setksmps donnait des notes avec une valeur de xtratim très longue et ainsi ces notes ne se terminaient jamais.

- Changements système :

  - Il y a maintenant un mode serveur qui accepte des entrées via UDP (avec l'option --port).
  - Un bogue très ancien dans extract a été trouvé et corrigé. Cela laisse penser que cet utilitaire est très peu utilisé !
  - La façon dont le générateur de partition externe était écrit a changé de manière conséquente. En particulier, ceci devrait corriger un bogue assez étrange sous Windows.
  - Correction d'un bogue de plantage dans la fonction de rappel d'un canal invalue à cause de l'extraction d'un mauvais objet de données depuis les données d'hôte de csound.
  - Correction d'un bogue dans les UDOs sans ksmps local lorsque kcounter était utilisé de manière incorrecte.
  - Meilleur contrôle dans les canaux.
  - (Expérimental) Si la variable d'environnement CS_UDO_DIR est définie, tous les fichiers du répertoire courant avec une extension .udo sont automatiquement inclus au début de l'orchestre. A vérifier pour voir si c'est ce qui était demandé.
  - (Expérimental) Il y a de nouveaux opcodes GPGPU cuda (seulement le code source) : cudasynth (3 versions pour la synthèse additive, la synthèse additive de fsigs et la resynthèse par vocoder de phase) et cudanal (une version GPGPU de pvsanal).

- Changements internes :

  - Plusieurs tentatives d'accélération du code.
  - Amélioration de l'inférence de type et du parseur.

- iOS:

  - Correction du plantage lorqu'aucun csoundSetHostImplementedMIDIIO n'est utilisé sous iOS alors que la valeur de _RTMIDI est fixée.

- OSX:

  - Correction du nom du périphérique d'entrée pour auhal.

### Notes de parution de Csound6

Csound6 est une réécriture significative d'une grande partie du code. En particulier, l'API n'est plus compatible, mais tous les anciens fichiers au format orc/sco/csd devraient fonctionner.

Il y a de nouvelles facilités comme la précision à l'échantillon et le mode temps réel décrit ci-dessous.

IMPORTANT : la variables d'environnement localisant les greffons se nomme OPCODE6DIR64 ou OPCODE6DIR (noter le 6) afin que Csound6 puisse coexister avec Csound5.

De même .csoundrc est renommé .csound6rc.

Les tableaux sont maintenant intégrés avec le support d'une syntaxe et d'opcodes. Ils existent également en format multidimensionnel. Ils sont habituellement créés avec l'opcode init ou avec l'opcode fillarray.

      k1[]  init 4

génère un tableau de taux-k à une dimension, de longueur 4. De même

      a2[][] init 4, 4

crée un tableau carré 4x4 de taux-a.

      k2[]  fillarray 1, 2, 3, 4

crée un vecteur de 4 éléments rempli avec 1,...4, qui définit aussi sa longueur.

Les éléments sont atteints par indexation entre [] comme k1[2] ou a2[2][3]. Les tableaux unidimensionnels remplaces les tvars et on peut les utiliser dans des opcodes comme maxtab, mintab et sumtab (voir ci-dessous). Un élément de tableau peut être rempli en le plaçant à la gauche d'un opcode :

      aSigs[0] vco2 .1, 440
      aSigs[1] vco2 .1, 880

Le nouveau mode prioritaire temps réel peut être activé en passant --realtime ou en fixant le champ realtime_mode de CSOUND_PARAMS à 1. Cela provoque les effets suivants :

1. tout opcode de lecture/écriture de fichier audio est traité de manière asynchrone dans un thread séparé.
2. toutes les opérations d'initialisation sont exécutées de manière asynchrone.

Le support du multicoeurs a été entièrement réécrit avec l'utilisation d'un algorithme différent pour la répartition des tâches, ce qui devrait consommer moins de mémoire et moins de verroux.

- Nouveaux opcodes :

  - faustgen
  - array -- plusieurs opcodes nouveaux ou révisés -- voir Opcodes de tableaux
  - compileorc reçoit le nom d'un fichier contenant une collection de définitions d'instrument et les compile en remplaçant les versions existantes s'il y en a. Retourne 0 en cas de réussite.
  - compilestr est comme compileorc mais il reçoit une chaîne de caractères.
  - readscore exécute le préprocesseur de partition sur une chaîne de caractères et organise ensuite les nouveaux évènements via le mécanisme d'évènements en temps réel, retournant 0 en cas de réussite.

- Orchestre

  - Les évènements de note peuvent commencer et se terminer au milieur d'un cycle-k. Comme c'est un changement incompatible, ce n'est invoqué que si l'option --sample-accurate est spécifiée dans la ligne de commande. A noter que cela ne fonctionne pas avec les notes liées et que lorsque l'initialisation d'une note est ignorée cela peut poser problème.
  - Les instruments peuvent fonctionner avec des valeurs de ksmps locales en utilisant `setksmps iksmps` comme dans les UDOs de Csound5.
  - La compilation peut s'effectuer à n'importe quel moment, les nouveaux instruments étant ajoutés ou remplaçant les anciens. Les instances actives des anciennes définitions d'instrument ne sont pas affectées. La seule limitation est que les constantes de l'en-tête dans instr0 ne sont lues qu'une fois lors de la première compilation. Du code d'initialisation peut être placé en dehors des instruments dans l'espace global, et il ne sera exécuté qu'une seule fois après la compilation. Dans ce cas, la génération d'évènements de partition peut être complètement remplacée par du code de l'orchestre. Voir aussi les nouveaux opcodes compileorc et compilestr.
  - Nouvelle syntaxe avec les opérateurs +=, -=, *= et /=. Ce sont plus que des bonus de syntaxe ; il est recommandé d'utiliser += et -= pour les réverbérations avec accumulation car ils donnent un meilleur comportement multicoeurs.
  - Les opcodes add, sub, mul et div ont été supprimés ; utiliser les formes + - * /. Peu de gens connaissaient l'existence de ces opcodes.
  - Tout opcode avec une seule entrée et aucune sortie peut être utilisé comme une fonction. Certains opcodes peuvent nécessiter une annotation de type pour résoudre les ambiguïtés. Plus de détails dans Syntaxe fonctionnelle dans Csound6.
  - Une instruction peut aller à la ligne après une virgule, un signe égal ou une opération arithmétique.
  - Il y a un ensemble d'opérations nouvelles ou recodées sur les tableaux de valeurs-k, la plupart restreintes aux tableaux à une dimension (vecteurs) :

         kans minarray ktab       retourne la plus petite valeur du
                                  tableau (peut-être) multidimensionnel
         kans maxarray ktab       comme mintab
         kabs sumarray ktab       somme de toutes les valeurs dans le tableau
         ktab genarray imin, imax[, inc]
                                  génère un vecteur de valeurs entre imin
                                  et imax par pas de inc (1 par défaut)
         ktab2 maparray ktab1, "sin" applique le fonction de taux-k à 1 arg
                                  dans la chaîne, à chaque élément du vecteur
         ktab2 maparray_i ktab1, "sin" applique le fonction de taux-i à 1 arg
                                  dans la chaîne, à chaque élément du vecteur
         ktab2 slicearray ktab1, istart, iend
                                  retourne une tranche de ktab1 allant de ktab1[istart]
                                  à ktab1[iend]
         copyf2array ktab, kfn    copie les données d'une ftable dans un vecteur
         copya2ftab  ktab, kfn    copie les données d'un vecteur dans une ftable

    L'arithmétique sur les tableaux est permise. En particulier l'addition, la soustraction, la multiplication et la division élément par élément sont accessibles en format arithmétique. Les mêmes opérations sont permises entre un tableau et un scalaire.
  - Chaque instance d'instrument a un bloc-notes de quatre valeurs persistantes ; on peut ainsi reporter ces valeurs dans une nouvelle utilisation de l'instrument ; peut être utile pour le legato, etc.
  - Si le numéro de table -1 est passé, une onde sinus interne équivalente à `f. 0 16382 10 1` est utilisée. L'écriture dans cette table produira des résultats imprévisibles, mais elle n'est pas interdite. La valeur 16382 peut être changée par l'option de ligne de commande --sine-size=# où # est arrondi à une puissance de deux.
  - Plusieurs opcodes oscil ont maintenant un paramètre de ftable facultatif, prenant par défaut l'onde sinus interne. (oscil1, oscil1i, oscil, oscil3, oscili, foscil, foscil1, loscil, loscil3).

- Partition

  - Les lignes de la partition peuvent avoir plusieurs chaînes de caractères.
  - Changement pour les caractères d'échappement dans les chaînes de caractères de la partition -- ils sont inactifs.
  - Noter aussi l'opcode readscore.

- Opcodes et gens modifiés

  - La fonction k() peut prendre un argument de taux-a et produit dans ce cas un appel à downsamp.

- Utilitaires

  - les fichiers d'analyse hetro/adsyn peuvent être indépendants de l'ordre des octets s'ils sont créés avec -X. La contrepartie est un fichier un peu plus long et un chargement un peu plus lent. L'utilitaire het_export crée le format indépendant à partir de l'ancien, et het_import n'est plus nécessaire.
  - cvanal et lpanal produisent des fichiers indépendants de la machine si l'option -X est utilisée. Les opcodes convolve, lpread, etc, acceptent les deux formats. Il est recommandé d'utiliser le format indépendant de la machine. Les fichiers d'analyse produits avec -X peuvent être utilisés sur d'autres systèmes.

- Frontaux

- Corrections de bogues

- Changements système

  - Sous Linux et OSX le traitement multilingue est maintenant sécurisé pour les threads et local.

- Changements de plateforme

- API

  Nouvelles fonctions de l'API...

  - Nouvelles fonctions de configuration et de paramètres

                PUBLIC int csoundSetOption(CSOUND *csound, char *option);
                PUBLIC void csoundSetParams(CSOUND *csound, CSOUND_PARAMS *p);
                PUBLIC void csoundGetParams(CSOUND *csound, CSOUND_PARAMS *p);
                PUBLIC void csoundSetOutput(CSOUND *csound, char *name, char *type,
                                            char *format);
                PUBLIC void csoundSetInput(CSOUND *csound, char *name);
                PUBLIC void csoundSetMIDIInput(CSOUND *csound, char *name);
                PUBLIC void csoundSetMIDIFileInput(CSOUND *csound, char *name);
                PUBLIC void csoundSetMIDIOutput(CSOUND *csound, char *name);
                PUBLIC void csoundSetMIDIFileOutput(CSOUND *csound, char *name);

  - Nouvelles fonctions d'analyse et de compilation

                PUBLIC TREE *csoundParseOrc(CSOUND *csound, char *str);
                PUBLIC int csoundCompileTree(CSOUND *csound, TREE *root);
                PUBLIC int csoundCompileOrc(CSOUND *csound, const char *str);
                PUBLIC int csoundReadScore(CSOUND *csound, char *str);
                PUBLIC int csoundCompileArgs(CSOUND *, int argc, char **argv);

  - Nouvelle fonction pour démarrer Csound après la première compilation

                PUBLIC int csoundStart(CSOUND *csound);

  - Nouveaux accès au bus logiciel sécurisés pour les threads

                PUBLIC MYFLT csoundGetControlChannel(CSOUND *csound, const char *name);
                PUBLIC void csoundSetControlChannel(CSOUND *csound, const char *name, MYFLT val);
                PUBLIC void csoundGetAudioChannel(CSOUND *csound, const char *name, MYFLT *samples);
                PUBLIC void csoundSetAudioChannel(CSOUND *csound, const char *name, MYFLT *samples);
                PUBLIC void csoundSetStringChannel(CSOUND *csound, const char *name, char *string);
                PUBLIC void csoundGetStringChannel(CSOUND *csound, const char  *name, char *string);

  - Nouvelles fonctions de copie de table sécurisées pour les threads

                PUBLIC void csoundTableCopyOut(CSOUND *csound, int table, MYFLT *dest);
                PUBLIC void csoundTableCopyIn(CSOUND *csound, int table, MYFLT *src);

  L'API a été sécurisée pour les threads si bien que l'exécution et le contrôle peuvent avoir lieu dans des threads séparés (après un appel à csoundStart() ou à csoundCompile()). La sécurité pour les threads est assurée par

  1. l'usage de lecture/écriture atomique sur les canaux de contrôle
  2. des verroux tournants pour les canaux audio et de chaîne de caractères
  3. des exclusions mutuelles protégeant la compilation, les évènements de partition et les accès aux tables.

- Interne

  - Le système de construction est maintenant cmake (et plus scons comme dans Csound5).
  - Plusieurs opcodes d'accès aux tables ont été réécrits mais ils se comportent de la même façon. De même diskin et diskin2 utilisent maintenant le même code si bien que diskin devrait être plus stable.
  - L'ancien parseur est supprimé.

- Nouvelles fonctions internes dans Csound

          void (*FlushCircularBuffer)(CSOUND *, void *);
          void *(*FileOpenAsync)(CSOUND *, void *, int, const char *, void *,
                                 const char *, int, int, int);
          unsigned int (*ReadAsync)(CSOUND *, void *, MYFLT *, int);
          unsigned int (*WriteAsync)(CSOUND *, void *, MYFLT *, int);
          int  (*FSeekAsync)(CSOUND *, void *, int, int);
          char *(*GetString)(CSOUND *, MYFLT);
                   Extrait une chaîne d'un argument d'évènement de partition.

- Fonctions supprimées

          void *(*FileOpen)(CSOUND *, void*, int, const char*, void*, const char*);

- La partie "privée" de l'API a considérablement changé. Des structures commes EVTBLK ont également changé.

- Les macros LINKAGE1/FLINKAGE1 ont été renommées en LINKAGE_BUILTIN/FLINKAGE_BUILTIN.

- Le modèle pour la passe d'exécution des opcodes de taux-a est

      int perf_myopcode(CSOUND *csound, MYOPCODE *p)
      {
          uint32_t offset = p->h.insdshead->ksmps_offset;
          uint32_t early  = p->h.insdshead->ksmps_no_end;
          uint32_t nsmps = CS_KSMPS;
          ...
          if (UNLIKELY(offset)) memset(p->res, '\0', offset*sizeof(MYFLT));
          if (UNLIKELY(early))  {
            nsmps -= early;
            memset(&p->res[nsmps], '\0', early*sizeof(MYFLT));
          }
          for (n=offset; n<nsmps; n++) {
              .....
              p->res[n] = ....
          }
          return OK;
      }

- Les variables chaîne de caractères ont été réimplantées/

- La structure OENTRY a changé et elle a un nouveau champ de dépendance ; utiliser ce champ selon les nécessités de la sémantique multicoeurs. On peut le mettre à -1 et interdire ainsi tout parallélisme, mais au moins il est sûr.

- Tous les opcodes concernant l'audio doivent prendre en compte le code de précision à l'échantillon.

- Certaines fonctions de la précédente API sont supprimées ; OpenFile et OpenFile2, toutes deux remplacées par la nouvelle OpenFile2 avec argument supplémentaire.

- Des ajouts ont été faits aux spécifications du type d'argument pour les opcodes.

  - Les types quelconques ont été ajoutés comme suit :
    - '.' signifie un argument requis de n'importe quel type
    - '?' signifie un argument facultatif de n'importe quel type
    - '*' signifie une liste variable d'arguments de n'importe quel type
  - Les tableaux sont maintenant spécifiés par "[x]" où x est une spécification de type. Une spécification de type peut-être n'importe quelle spécification courante, y compris celle des types quelconques. Voir Opcodes/arrays.c pour un exemple d'utilisation.

- Nouveau système de type

  Un nouveau système de type a été ajouté à Csound6, et des modifications significatives ont été apportées au compilateur. Le système précédant de gestion des types dépendait de la première lettre du nom de variable à chaque détermination de son type. Cela impliquait de retester de nombreuses fois les types. De plus, l'ajout de nouveaux types était difficile, car il fallait modifier beaucoup de code particulier pour tester les nouvelles lettres de type.

  Dans Csound6, un système de type séparé a été ajouté. Les types sont définis comme CS_TYPE's. La création de variables d'un type et l'initialisation de mémoire sont encapsulées dans les CS_TYPE's. Ce changement facilite l'ajout de nouveaux types ainsi que les calculs génériques de réserve de mémoire, parmi d'autres choses.

  Le compilateur a été modifié depuis Csound5 pour utiliser désormais le système de type comme partie intégrale de sa phase de vérification sémantique. Les variables sont maintenant enregistrées dans un CS_VAR_POOL à leur première définition, la CS_VARIABLE ayant une référence à son CS_TYPE. Après cette première définition dans le bloc, l'information de type est consultée lors des accès ultérieurs à la variable plutôt que recalculée d'après le nom de la variable. Cela ouvre des possibilités pour de nouvelles stratégies de nommage et de typage des variables, à savoir l'utilisation de "myVar:K" pour dénoter un argument de taux-k. Cela ouvre aussi des possibilités pour les types définis par l'utilisateur, tels que "data myType kval, aval", avec l'utilisation ensuite de "myVar:myType" pour définir une variable de ce type. (Ceci est spéculatif, et ce n'est pas une proposition active pour le moment.)

  L'ajout du système de type a formalisé le système de type statique qui existait précédemmment dans Csound avant Csound6. Il a indubitablement simplifié la base de code en terme de gestion des types ainsi que posé les fondations d'une recherche future sur les types à intégrer dans Csound.

### Nouveautés dans la version 5.19 (7 janvier 2013)

C'est principalement une distribution de correction de bogues avec cependant de nouveaux opcodes et des améliorations.

- Nouveaux opcodes :

  - Module ipmidi pour le MIDI sur un réseau.

  - Opcode ppltrack.

  - Opcode combinv.

- GEN et macros :

  - Vérification améliorée dans GEN28.
  - Vérification de l'intervalle dans outrg et option de repliement.

- Orchestre :

  - Une instruction vide provoque un avertissement.
  - Numéros de ligne ajoutés à plusieurs messages d'arguments en entrée (nouveau parseur).

- Opcodes et GENs modifiés :

  - De meilleurs messages d'erreur et d'avertissement.
  - loopseg vérifie maintenant le nombre de ses arguments.
  - harmon2/3/4 ont été améliorés.
  - active : une option a été ajoutée pour ignorer les instances en phase de relâchement.
  - Une nouvelle implémentation mieux testée de ChordSpace.

- Bogues corrigés :

  - L'optimisation bâclée des filtres passe-bas a été corrigée.
  - Les opcodes chn ont été corrigés sous Linux.
  - Un bogue de silence a été corrigé dans loscil.
  - GEN23 a été corrigé lorsqu'un commentaire ne se termine pas par une nouvelle ligne.
  - loopseg a été corrigé.
  - Le nombre de canaux d'entrée et de sortie a été corrigé dans le nouveau parseur.
  - Le problème de GEN43 a été corrigé.
  - fout a été corrigé.
  - centroid avait tendance à planter.
  - Bogue mineur dans le système d'impression qui perdait les %.
  - Il y avait une valeur non initialisée dans fold.
  - Il y avait des valeurs non initialisées dans dconv.
  - L'affectation des fsigs fonctionne maintenant.

- Changements système :

  - Des erreurs de segmentation sont évitées lors de certaines erreurs de l'utilisateur.
  - Les opcodes modal4 sont plus rapides.
  - La compilation cabbage est possible.
  - La taille des pchamps a été rendue dynamique dans le message d'évènement de csoundapi~.
  - Le format de sortie par défaut pour les tuyaux et les réels en double précision est AU.
  - Changement pour ircam avec le format par défaut, '-o stdout' et les tuyaux.
  - Réels en double précision ajouté au format de sortie.

- Changement sur les plates-formes :

  - Linux :

    - Les spinlocks sont initialisés (bogue corrigés dans les opcodes chn).

  - OSX :

    - Sélection des périphériques améliorée dans le module rtauhal.
    - Un tampon circulaire et une opération sans verrou ont été ajoutés à rtauhal.
    - Le programme d'installation sur MacOSX a été corrigé (en créant des liens symboliques vers lib_csnd.dylib).

  - Haiku :

    - Nouvelle plate-forme.

  - Android :

    - On peut utiliser -B pour fixer la taille de tampon circulaire.
    - On a ajouté les opcodes fluidsynth.
    - On a ajouté la méthode inputMessage à CsoundObj.
    - Il est possible d'installer CSDPlayer sur une carte SD.

  - iOS :

    - Routage audio amélioré.
    - Le haut-parleur inférieur est choisi par défaut.

- API :

  - Nouvelle fonction csoundCompileFromStrings().

### Nouveautés dans la version 5.18 (29 août 2012)

C'est principalement une distribution de correction de bogues avec cependant de nouveaux opcodes et des améliorations.

- Nouveaux opcodes :

  - centroid semblable à pvscent mais agissant sur des signaux audio.
  - cosseg comme linseg mais avec interpolation cosinusoïdale.
  - cossegb comme linsegb mais avec interpolation cosinusoïdale.
  - cossegr comme linsegr mais avec interpolation cosinusoïdale.
  - joystick pour lire des valeurs venant d'un joystick externe (seulement sous Linux).
  - log2, fonction logarithme de base 2.
  - platerev modélisant une plaque réverbérante carrée.
  - pwd pour déterminer le répertoire courant
  - readf pour lire des chaînes de caractères d'un fichier
  - readfi pour lire des chaînes de caractères d'un fichier à l'initialisation
  - vbap de la famille vbap, flexible sur le nombre de haut-parleurs et sur le choix des dispositions.
  - vbapg semblable à vbap mais ne calculant que les gains sur les canaux.

- Nouvelles fonctionnalités

  - Changements à <CsOptions> permettant les espaces entre les mots et les caractères d'échappement.
  - fout et fin utilisent une meilleure stratégie de mémoire tampon et sont ainsi plus rapides.
  - Il est possible de ne spécifier qu'un fichier d'orchestre avec l'option --orc. Utile lorsqu'on a pas besoin de partition.
  - Une nouvelle option de ligne de commande, --ogg, a été ajoutée pour avoir aisément une sortie au format ogg/vorbis.
  - On a ajouté alsaseq au midi en temps réel.

- Bogues corrigés et améliorations :

  - Les opcodes dates pouvaient planter sur les architectures 64 bit ; c'est corrigé.
  - Certains inter-verrous multicoeur étaient erronés. On pense que ce n'était pas encore un problème, mais que ça le serait devenu dans le futur.
  - Il y avait des cas de double fermeture d'un fichier conduisant au plantage en fin de programme.
  - Deux nouvelles fonctionnalités dans partikkel. La loi de panoramique pour channelmasks peut maintenant être fixée par une table de fonction (second argument facultatif de partikkel), et les nouveaux opcodes de support partikkelget et partikkelset, pour atteindre et modifier les indices de masquage interne de partikkel.
  - follow2 a été retravaillé pour que les calculs au taux-i et au taux-k soient les mêmes.
  - pvscent a été corrigé car il retournait la moitié de la valeur correcte.
  - vbaplsinit peut créer plus d'une disposition de haut-parleurs utilisables par vbap/vbapg. Egalement des diagnostics bien meilleurs sur les dispositions incorrectes.

- Changements internes :

  - Changement du code pour une possible utilisation de bison 2.6.
  - Il est supposé que la version 1.0.19 ou une version ultérieure de libsndfile est disponible.
  - Si la partition est omise, une boucle d'attente quasi infinie est générée.

### Nouveautés dans la version 5.17 (mars 2012)

C'est principalement une distribution sans changement majeur mais avec de nombreuses corrections.

- Nouvel opcode :

  - opcode cell d'automate cellulaire.

- Opcodes et GENs modifiés :

  - active rapporte maintenant le nombre total d'instruments actifs ou alloués si son argument vaut zéro.
  - Les opcodes de socket TCP stsend et strecv ont été remodelés selon un schéma logique.
  - Le système DSSI accepte maintenant jusqu'à 9 canaux.
  - FLsavesnap fonctionne avec d'autres widgets pour lesquels imin > imax.

- Utilititaires :

  - csbeats est mieux documenté et il est compilé par défaut ; il propose également plus de durées de notes.
  - Quelques failles de sécurité dans les utilitaires ont été corrigées.

- Bogues corrigés :

  - L'opcode unirand au taux-a a été corrigé.
  - Correction des paramètres régionaux pour les constantes virgule flottante dans l'orchestre.
  - transegr a été corrigé.

- Changements système :

  - La partition peut maintenant durer plus longtemps (changement de la taille de variable temporelle).
  - Une partition vide donne une durée d'exécution très longue (de nombreuses années).
  - Le code Android est distribué.
  - Changement dans l'utilisation des fichiers tmp ; ils sont maintenant tous effacés à la fin de l'exécution (auparavant certains d'entre eux restaient) et la variable d'environnement TMPDIR est utilisée.
  - L'interaction entre les commentaires, les fins de ligne et la fin de fichier a été fixée.
  - Les nombres hexadécimaux sont maintenant autorisés dans l'orchestre.
  - Un orchestre vide ne provoque plus de plantage.
  - L'expansion de macro dans une chaîne a changé.
  - Lorsque qu'il y a un eof dans une macro de partition mal formée, la boucle infinie est évité.
  - Les diagnostiques de noms de macro avec arguments et de fuites de mémoire ont été corrigés.
  - Changement du préprocesseur : {{ }} à l'intérieur de "..." et de meilleurs diagnostiques.
  - L'installeur pour Windows a été corrigé afin de supprimer complètement $INSTDIR\bin de PATH durant la désinstallation : cela nettoie la variable d'environnement PATH lors d'une désinstallation sous Windows. Auparavant, il restait un "\bin" résiduel dans le PATH.
  - La classe CsoundAC de MusicModel est plus utilisable par les programmes C++.
  - ftcps manquait en tant que fonction.

- Changement internes :

  - Beaucoup ! Certains messages modérés, amélioration du code, etc.

### Nouveautés dans la version 5.16 (février 2012)

Le changement principal est que le nouveau parseur est maintenant employé par défaut. L'ancien parseur est toujours disponible en cas de difficultés, mais le nouveau parseur a été testé en profondeur depuis le début de l'année, et il a reçu une restructuration complète de l'expansion des macros. Une des conséquences est l'exécution plus rapide de la plupart des orchestres bien que leur analyse soit plus lente. Quelques optimisations sont implémentées sous la forme de réduction en constante dans des cas simples. Les numéros de ligne et les noms de fichier sont mieux tracés qu'auparavant.

Quelques fuites de mémoire ont été aussi corrigées.

- Nouveaux opcodes :

  - Opcodes adaptés de SuperCollider par Tito Latini: dust, dust2, gausstrig, gendy, gendyc et gendyx.
  - Un générateur de bruit fractal par Tito Latini: fractalnoise.
  - Opcodes pour accéder aux valeurs dans les tables par indexation directe, par John ffitch: ptable, ptablei, ptable3 et ptablew. Ces opcodes sont semblables respectivement à table, tablei, table3 et tablew, mais ils ne nécessitent pas des tables ayant une longueur en puissance de deux.

- Opcodes et GENs modifiés :

  - Il y avait un problème de borne d'intervalle dans l'opcode tab qui pouvait induire une référence hors-limites erronée.
  - GEN15 appelait en interne GEN13 et GEN14, en leur passant des valeurs d'amplitude non initialisées. Problème corrigé.
  - fmbell prend maintenant un argument facultatif pour contrôler la durée d'entretien.
  - Changement de base de pvs pour les conversion de tab vers table.
  - poscil est maintenant polymorphique, ce qui permet d'avoir des amplitudes et des fréquences de taux-k ou de taux-a.
  - Le comportement de p() et de i() a changé lorsque l'argument est de taux-k.
  - Le fonctionnement différé GEN49 est corrigé.
  - GEN23 offre maintenant un fonctionnement différé.

- Utilititaires :

  - Indicateur pour utiliser avec le nouveau parseur les fichiers en mémoire.

- Frontaux :

  - Un accès aux tables a été ajouté à csoundapi~ via de nouvelles méthodes get/set.

- Bogues corrigés et améliorations :

  - Un grand nombre dans le nouveau parseur en relation avec la précédence et le multicoeur.
  - De meilleurs diagnostiques lorsqu'un fichier ou un csd est manquant.
  - fichier csd : CsFileB et CsSampleB corrigés.
  - L'instruction de partition 'n' a été corrigée.
  - Un bogue dans diskin2 produisant une boucle infinie a été corrigé.
  - Un bogue dans hrtfmove causant un fondu-enchaîné bruiteux a été corrigé.
  - Des dépassement de tampon aléatoires ont été corrigés dans certains utilitaires.
  - Une erreur de segmentation dans midicN est maintenant évitée.
  - Bogue dans mp3in lorsque skip=0, corrigé.
  - L'instruction de partition 'r' a été corrigée en ce qui concerne les macros.
  - sndwarp pouvait engendrer une erreur de segmentation.

- Changements système :

  - Les commandes de préprocesseur #if #else #endin fonctionnent.
  - La profondeur d'#includes est maintenant limitée à la place d'une récursion infinie.
  - Si --nodisplays ou -d est utilisé, tous les affichages sont réellement supprimés ; cela corrige le bogue qui, lorsque l'on utilisait -d ou --nodisplays, permettait à la fonction csoundModuleInit de winFLTK.c de fixer des procédures de rappel pour l'affichage ; ce bogue était causé par l'appel d'applications python TK et de CsoundYield_FLTK.
  - Les fuites de mémoire dans mp3in et dans mp3len ont été corrigées.

- Changement internes :

  - Très, très, très nombreux ! Et le nouveau parseur ...

### Nouveautés dans la version 5.15 (décembre 2011)

- Nouveaux opcodes:

  - opcode ftab2tab.
  - opcode tab2pvs.
  - opcode pvs2tab.
  - opcode cpumeter, (pas vraiment nouveau mais désormais disponible sous OSX)
  - opcode minmax.
  - opcode ftresize (EXPERIMENTAL).
  - opcode ftresizei (EXPERIMENTAL).
  - opcode hrtfearly.
  - opcode hrtfreverb.

  Nouveau GEN et macros

  - Code permettant de différer GEN49 [NB semble ne pas fonctionner]

- Opcodes et GENS modifiés

  - socksend et sockrecv n'effectuent plus de test MTFU et fonctionnent sous Windows.
  - mpulse a été modifié de façon à ce que si l'évènement suivant a une date négative, sa valeur absolue est utilisée.
  - l'opcode serial fonctionne maintenant sous Windows comme sous Un*x.
  - out, out2, outq, outh, outo, outx et out32 sont maintenant identiques et prennent autant d'arguments que nchnls. Cela remplace le remappage d'opcodes actuel.
  - turnoff2 est maintenant polymorphe quant aux type S et k (il accepte les noms d'instrument).

- Bogues corrigés :

  - GEN42 a été corrigé.
  - jacko : une erreur de segmentation a été corrigée en supprimant l'option inutilisée de JackSessionID.
  - la fuite de mémoire de doppler a été corrigée.
  - transegr a été corrigé en mode release, lorsque la majeure partie de l'enveloppe est ignorée.
  - FLPack est maintenant conforme au manuel.
  - max_k est maintenant conforme au manuel.
  - hrtfreverb a été corrigé.
  - le code atsa fonctionne maintenant sous Windows dans la plupart des cas.
  - bogue de tabmorph corrigé.
  - le problème des opcodes définis par l'utilisateur n'ayant pas de sortie est réglé.
  - Différentes corrections aux commentaires de type /* ... */.

- Changements systèmes :

  - Différents questions de licence ont été réglées.
  - Loris ne fait plus partie de l'arbre de Csound.
  - Des fuites de mémoire ont été corrigées.
  - Si aucune partition n'est fournie, une partition factice avec une durée de 100 ans est créée.
  - Tout le traitement de partition se fait en mémoire sans fichier temporaire.
  - La mémoire des chaînes de caractère est maintenant extensible et sans limitation de taille.
  - #if #else #end sont maintenant dans le nouveau parseur.
  - Ajustements de la précision des fichier MIDI en sortie.
  - Sous OSX, passage de Coreaudio à AuHAL
  - Le multicoeur est maintenant sûr avec ZAK, les canaux d'E/S et la modification de tables.
  - Nouveau module coremidi.
  - Amélioration du clavier virtuel : 1) Menu déroulant pour choisir l'octave de base (celle qui commence avec la touche virtuelle correspondant à la lettre Z du clavier de l'ordinateur). La valeur par défaut est 5, ce qui préserve la compatibilité descendante. 2) Correspondance Maj-X ce qui ajoute deux octaves à la correspondance X pour un total de quatre octaves jouables depuis le clavier de l'ordinateur (en partant de l'octave de base choisie). 3) Correspondances Ctrl-N / Ctrl-Maj-N pour incrémenter / décrémenter la réglette du contrôleur N. 4) La roulette de la souris contrôle maintenant les réglettes.
  - type tsig pour les vecteurs.
  - tsigs et fsigs autorisés comme arguments des UDOs
  - API : version mineure augmentée.

- Changements internes :

  - Très, très, très nombreux !

### Nouveautés dans la version 5.14 (octobre 2011)

- Nouveaux opcodes :

  - opcode mp3len.
  - opcode qnan.
  - opcode qinf.
  - opcode exprandi.
  - opcode cauchyi.
  - opcode gaussi.
  - opcode cpumeter.
  - opcode linsegb.
  - opcode expsegb.
  - opcode transegb.
  - opcode expsegba.
  - opcode pvsgain.
  - opcode pvsbufread2.
  - opcodes serial.
  - opcodes lua.
  - opcode plustab.
  - opcode multtab.
  - opcode maxarray.
  - opcode minarray.
  - opcode sumarray.
  - opcode scalearray.

- Nouvelles fonctionnalités :

  - le processeur beats est renommé csbeats et distribué
  - l'utilité mkdb qui fournit un catalogue des greffons opcodes/bibliothèques
  - la bibliothèque ladspa construite dans le système par défaut
  - les macros sont maintenant déroulées en chaînes dans la partition
  - il y a une syntaxe de boucle until .. do .. od (seulement avec le nouveau parseur)
  - les signaux SIGPIPE sont ignorés plutôt que de provoquer la sortie de Csound
  - il est possible d'utiliser des vecteurs de valeurs de taux-k, appelés variables-t. Ils sont initialisés à une taille donnée et peuvent être lus avec la syntaxe simple []. L'affectation des composantes ne se fait qu'avec =. Il y a aussi quelques nouveaux opcodes qui fournissent des fonctionnalités plus larges.

- Bogues corrigés et améliorations :

  - la lecture de valeurs pour remplir des tables était défectueuse à cause de commentaires
  - l'erreur interne dans wii_data a été corrigée
  - pvsshift a été corrigé
  - jacko a été corrigé
  - petite correction dans gen23
  - wiimote corrigé
  - atsaadd corrigé
  - compress corrigé pour fonctionner avec 0dbfs
  - le compteur de position de pvsbufread a été corrigé
  - l'opcode tempo a été corrigé
  - la section CsFileB des fichiers .csd était défectueuse, c'est corrigé
  - les tables différées de gen01 pouvait avoir une taille erronée
  - vbap_zak rendu fonctionnel (!)
  - le problème de mémoire dans ATSsinoi est corrigé
  - différentes corrections dans cscore
  - différentes corrections dans partials et dans tradsyn
  - transegr pouvait planter dans certains cas
  - les opcodes loris proviennent de la dernière version
  - l'opcode date a une nouvelle origine sur certaines plates-formes pour éviter les dépassements
  - pvsblur fonctionne maintenant après un reinit
  - diskin, diskin2 et soundin peuvent lire maintenant jusqu'à 40 canaux
  - prints se comporte mieux avec les arrondis
  - fmpercfl a maintenant un vibrato qui fonctionne
  - atreson a maintenant un paramètre de gain au taux-k
  - l'opcode comb est consolidé pour pouvoir accepter le même argument en entrée et en sortie
  - précision accrue dans line et expon
  - OSCsend retrouve l'espace préalablement perdu
  - OSCsend peut envoyer une table sous forme d'objet binaire (blob) avec la balise T -- expérimental et non testé
  - lpf18 a maintenant un argument facultatif iskip
  - i() accepte aussi une valeur de taux-i. Dans ce cas, c'est un no-op (opcode neutre)
  - makecsd a été révisé et étendu pour avoir des options pour le traitement du MIDI et des partitions et les licences
  - lpanal revu pour supprimer les boques et des étrangetés
  - un problème de bruit dans alsa et un clic dans portaudio ont été corrigés
  - le pilote portaudio a été modifié pour être plus robuste lors du stop/exit

- Changements internes :

  - De nombreuses modifications dans le nouveau parseur pour le rendre opérationnel, mais à utiliser avec précaution
  - Le système multi-coeurs est distribué en mode expérimental et doit être utilisé avec beaucoup de précautions.

### Nouveautés dans la version 5.13 (janvier 2011)

- Nouveaux opcodes :

  - opcode median.
  - opcodefilevalid.
  - opcodes de traitement spectral pvstanal, pvswarp, temposcal et pvslock.
  - opcode mincer.
  - opcode de suite de fareylen.

- Nouvelles fonctionnalités :

  - Générateurs de nombres aléatoires réels utilisant /dev/random (seulement sur Linux).
  - macro INF ajoutée aux orchestres ; z se lit infini dans les partitions
  - init a été changé pour permettre plusieurs initialisations en une seule instruction
  - GEN pour supporter les suites de Farey
  - maxalloc, cpuprc et active acceptent maintenant les instruments nommés.
  - Si la normalisation dans les opcodes pow vaut 0, elle est traitée comme si elle valait 1
  - inch peut prendre jusqu'à 20 entrées et sorties.
  - pvscale, pvsvoc et pvsmix ont maintenant de très bons modes de préservation d'enveloppe spectrale (1 = cepstrum filtré, 2 = enveloppe véritable).
  - oscil1 pouvait être statique si la durée était trop longue ; maintenant il y a un incrément positive minimum.
  - GEN49 utilise maintenant les chemins de recherche.

- Bogues corrigés et améliorations :

  - Le compte des lignes a été fixé dans les orchestres, ainsi que le caractère \ dans les chaînes.
  - Les opcodes rapides tab sont protégés contre les plantages
  - % dans les impressions formatées pouvait planter
  - La double libération de mémoire dans fgen a été fixée
  - sndwarp est plus discret (il donnait trop de messages)
  - gen41 utilise des probabilités positives
  - adsynt a été retravaillé pour supprimer de nombreux bogues
  - L'erreur de phase deadsynt2 a été fixée
  - Le boque du nombre maximum de gens a été fixé
  - Meilleur test dans grain4
  - Meilleur test dans adsyn
  - Le module était erroné dans le nouveau parseur
  - atonex/tonex faisaient de fausses opérations
  - mp3in pouvait répéter le son en fin de fichier
  - l'opcode changed s'initialise à zéro
  - Un bogue sérieux a été corrigé dans tabmorpha
  - Un bogue sérieux a été supprimé de GEN49, ce qui fait qu'il n'y a plus de longs silences incorrects.
  - Opcode partikkel : un bogue de placement de grain dans un sous-échantillon lorsque l'on utilise la MF du taux de grains a été fixé

- Changements internes :

  - On trouve dans le nouveau parseur seulement les opérateurs @ et @@ pour arrondir l'entier suivant à une puissance de 2 ou à une puissance de 2 + 1
  - Le tri de la partition a été rendu beaucoup plus rapide
  - lineto a été amélioré
  - Les gens nommés sont autorisés
  - Les divers affichages comprennent le nom d'instrument si celui-ci est disponible
  - Une option de ligne de commande pour omettre le chargement d'une bibliothèque
  - Le nombre de canaux de sortie n'est plus contraint à égaler celui des canaux d'entrée
  - Plusieurs corrections au nouveau parseur
  - Les avertissements sont plus utilisés que les messages (ce qui permet de les désactiver)
  - csoundSetMessageCallback est réinitialisé si callback vaut null

### Nouveautés dans la version 5.12 (janvier 2010)

- Nouveaux opcodes :

  - transegr est une version de l'opcode transeg qui a une section de relâchement déclenchée par midi, par un opcode turnoff2 ou par un évènement de partition i dont le numéro d'instrument est négatif.
  - ftgenonce génère une table de fonction depuis la définition d'un instrument, sans duplication de données.
  - passign permet une initialisation rapide de variables de taux-i à partir de p-champs.
  - crossfm implémente la synthèse par modulation de fréquence croisée.
  - loopxseg est comme loopseg mais avec une enveloppe exponentielle.
  - looptseg est comme loopseg mais avec une enveloppe flexible comme transeg.

- Bogues corrigés et améliorations :

  - pvshift écrasait les données en mode double.
  - Le cas 3 de pan2 a été fixé.
  - clockon et clockoff fonctionnent à nouveau.
  - cross2 et interp pouvaient avoir des divisions par zéro.
  - Le numéro de ligne dans les messages d'erreur n'inclut plus de texte de .csoundrc.
  - p5gconnect a été modifié pour utiliser un processus léger séparé afin d'éviter les problèmes de temps mort.
  - transeg vérifie le nombre de ses arguments.
  - sfload se limitait à 10 soundfonts et n'était pas sécurisé. Il n'est plus limité.

- Changements Internes :

  - \" peut être utilisé comme caractère d'échapement dans les chaînes de l'orchestre.
  - Le nouveau parseur a été corrigé pour les arguments facultatifs.
  - Meilleure vérification de l'instruction f avec un nombre négatif.
  - Les soundfonts n'initialisent le tableau des hauteurs qu'une seule fois dans les opcodes de soundfont.
  - La collection usuelle de changements mineurs, de mises en forme et de commentaires.

### Nouveautés dans la version 5.11 (juin 2009)

- Nouveaux opcodes :

  - mp3in : permet la lecture des fichiers mp3 directement dans l'orchestre.
  - wiiconnect, wiidata, wiisend, wiirange opcodes par john ffitch pour recevoir et envoyer des données de ou vers un contrôleur wiimote.
  - Nouveaux opcodes pour recevoir des données directement d'un P5 Glove (gant de données) par john ffitch p5gdata
  - tabsum additionne des sections de ftables
  - MixerSetLevel_i une version du taux d'initialisation seulement de MixerSetLevel
  - doppler implémente une simulation d'effet Doppler.
  - filebit retourne la profondeur binaire d'un fichier.
  - Les nouveaux opcodes de Graphe de Fluence permettent l'utilisation de graphes de fluences (graphes de flots de données asynchrones) dans Csound.

- Nouvelles fonctionnalités :

  - Nouveau type de panning pour l'opcode pan2
  - Nouvelle balise <CsExScore> de partition csd.
  - Nouvelle option -Ma pour le module ALSA RT MIDI qui écoute tous les périphérique.
  - Il y a un GEN49 pour lire des fichiers mp3.
  - Un code d'arrondi de bin a été ajouté à pvscale
  - Le support de taille de table non puissance de 2 a été ajouté à ftload> et à ftsave
  - GEN23 a été totalement réécrit pour être plus consistant dans ce qui constitue un séparateur et des commentaires. (Il n'y a toujours pas de commentaires /* */)

- Bogues corrigés et améliorations :

  - Nouveaux exemples pour les opcodes pvs par by Joachim Heintz : pvsarp, pvscent, pvsbandp, pvsbandr, pvsbufread, pvsadsyn, pvsynth, pvsblur, pvscale, pvscross, pvsfilter, pvsfreeze, pvshift, pvsmaska, pvsmorph
  - L'utilisation de la numérotation automatique des ftables réutilise les numéros de table
  - seed avec un argument positif était défectueux
  - sprintf avec une chaîne vide imprimait des données erronées
  - mute fonctionne maintenant à la fois avec les instruments numérotés et nommés
  - Petites corrections dans diskin et dans tablexkt

- Changements Internes :

  - SConstruct construit maintenant des bibliothèques partagées complètement indépendantes pour les adaptateurs de Python, Lua et Java.
  - Le nouveau Parseur est presque fonctionnel
  - Le retraçage des graphiques a été modifié de façon à ne redessiner que ceux qui sont sélectionnés.
  - Alsa-TR est plus tolérant sur les taux d'échantillonnage approchés.
  - Il est possible d'avoir une partition générée par un programme externe plutôt que d'utiliser le format de partition standard en spécifiant <CScore bin="translater"> pour appeler le programme de traduction des données de la partition.
  - lpc_export corrigé.
  - La limite sur la longueur des noms de macro a été supprimée.
  - PMAX, le nombre d'arguments d'un évènement de partition a été réduit de 2 unités, et un système de dépassement a été introduit pour que les GENs puissent avoir un nombre arbitraire d'arguments.
  - La version de l'API a été incrémentée à 2.1.
  - Nouvelle fonction de l'API ldmemfile2withCB() qui est une version de ldmemfile() qui permet de spécifier un callback appelé exactement une seule fois pour traiter le tampon MEMFIL après son chargement.
  - csound->floatsize corrigé; valait zéro dans les versions précédentes.
  - GetChannelLock ajouté.

### Nouveautés dans la version 5.10 (décembre 2008)

- Nouvelles fonctionnalités :

  - Nouvelle option pour écouter tous les périphériques MIDI avec le module temps réel de portmidi. Pour activer l'écoute de tous les périphériques utiliser "-+rtmidi=portmidi -Ma".
  - Implémentation du dithering sur la sortie ; le dithering rectangulaire et triangulaire est disponible dans certains cas.
  - Le type 6 de GEN20 a maintenant une option pour fixer la variance.

- Bogues corrigés et améliorations :

  - La variable d'environnement Locale a été fixée à "C numeric" pour éviter les problèmes de point décimal (, vs .).
  - Bogue corrigé dans diskin
  - outo était défectueux pour le canal 6
  - Bogue corrigé dans pitchamdf
  - L'initialisation de zfilter2 a été corrigée
  - Bogue corrigé dans s32b14
  - D'autres bogues qui n'avaient pas été publiés ont été corrigés.

- Changements Internes :

  - La version majeure de l'API de Csound est incrémentée à 2, ceci affectant aussi csound.so. Ceci signifie que Csound 5.10 est incompatible avec les applications (frontaux, clients ou hôtes) construites pour Csound 5.08 et pour les versions antérieures qui utilisent la version 1.x de l'API. Il faudra reconstruire ces applications pour qu'elles fonctionnent avec les versions courante ou futures de Csound. Les frontaux pour Csound écrits dans des langages interprétés tels que Python ou Java pourront continuer à fonctionner sans modification. Il est également possible de garder une version antérieure de la bibliothèque de Csound et une version de l'API 2.0 sur la même machine afin que les applications basées sur l'ancienne ou sur la nouvelle version de Csound puissent coexister. Ces changements n'affectent en rien la compatibilité des orchestres et des partitions de Csound : tous les anciens documents devraient continuer à fonctionner comme par le passé.
  - Le temps est maintenant mesuré en interne en échantillons, ce qui résoud un ancien bogue concernant l'arrondi du temps au taux-k.
  - Plusieurs changements internes concernant les branchements. Certains opcodes sont significativement plus rapides.

### Nouveautés dans la version 5.09 (octobre 2008)

- Nouveaux opcodes :

  - Nouvel opcode vosim par Rasmus Ekman qui recrée la technique historique VOSIM (VOcal SIMulator).
  - Nouvel opcode dcblock2 par Victor Lazzarini.
  - Nouveau modèle de l'oscillateur de Chua : chuap par Michael Gogins.
  - Nouveaux opcodes d'Algèbre Linéaire par Michael Gogins. Algèbre linéaire standard sur vecteurs et matrices réels et complexes : arithmétique composante à composante, normes, transposition et conjugaison, produits scalaires, matrice inverse, décomposition LU, décomposition QR et décomposition QR en valeurs propres. Inclut la copie de vecteur de et vers des signaux de taux-a, des tables de fonction et des signaux-f.
  - Nouveaux opcodes ambisonic : bformdec1 et bformenc1. Ces opcodes rendent obsolètes les anciens bformdec et bformenc.
  - Nouveaux opcodes de contrôle de la partition par Victor Lazzarini : rewindscoreet setscorepos.

- Nouvelles fonctionnalités :

  - Les opcodes de la famille vbap (vbap4, vbap8, vbap16 et vbapz) acceptent maintenant des variables de taux-k pour tous leurs arguments en entrée.
  - Nouveau module d'E/S pulseaudio sous Linux.
  - Nouveau paramètre facultatif ienv pour générer des enveloppes pour les opcodes de soundfont : sfplay, sfplay3, sfplaym et sfplay3m.
  - Ajout d'un 'argument de non-normalisation' à la routine GEN nommée "tanh". (Voir Routines GEN Nommées)
  - Ajout d'une option d'ordonnanceur de priorité sur alsa.

- Bogues corrigés et améliorations :

  - Notation scientifique permise dans GEN23 (comme c'était le cas dans csound4 !).
  - Bogue fixé dans l'initialisation de FLTK. L'utilisation de FLTK devrait être plus stable.
  - L'erreur sur les commentaires /* */ dans l'orchestre a été corrigée.
  - poscil n'écrase plus la fréquence si la variable est partagée.
  - printk et printks vérifient que l'opcode est initialisé.
  - soundout et soundouts sont déclarés obsolètes en faveur de fout.
  - L'opcode space a été modifié pour accepter des tables dont la taille n'est pas une puissance de 2 (taille différée).
  - Un bogue de pvsmorph a été corrigé.

- Changements Internes :

  - Le nouveau parseur reconnaît #include et les macros sans argument.
  - Moins de forçage de type entre floats et doubles dans la version float.
  - Un support expérimental multicore a été inclut.
  - L'opcode buzz a été réécrit.
  - Plusieurs autres changements internes et quelques corrections de bogues.

### Nouveautés dans la version 5.08 (février 2008)

- Nouveaux opcodes :

  - imagecreate, imagesize, imagegetpixel, imagesetpixel, imagesave, imageload et imagefree: nouveaux opcodes de traitement d'image par Cesare Marilungo pour lire/écrire des images png depuis Csound.
  - pvsbandp et pvsbandr par John ffitch, qui réalisent le filtrage passe-bande et réjection de bande dans le domaine spectral sur un signal pvs.
  - Nouveaux opcodes HRTF par Brian Carty : hrtfmove, hrtfmove2 et hrtfstat.
  - Nouveau opcodes de distorsion non-linéaire : powershape, polynomial, chebyshevpoly, pdclip, pdhalf, pdhalfy, et syncphasor
  - Nouvel opcode de contrôle de transport jack : jacktransport

- Nouvelles fonctionnalités :

  - Ajout de l'option de ligne de commande --csd-line-nums= pour sélectionner la façon de rapporter la ligne d'une erreur.
  - Nouvel opérateur de "non-report" (!) du langage de partition qui empêche le report implicite des p-champs dans les instructions i.
  - Ajout de l'option de ligne de commande --syntax-check-only (mutuellement exclusive avec --i-only)
  - Balise <CsLicence> pour les CSDs. <CsLicense> est acceptée comme une alternative à <CsLicence>.

- Bogues corrigés et améliorations :

  - L'ordre des sorties pour hilbert a été changé. Ce changement brise la compatibilité avec les versions précédentes, mais il fixe l'opcode qui travaille maintenant comme c'est décrit dans la documentation.
  - Les messages sur le chargement de greffons d'opcode ont été modifiés pour pouvoir être supprimés avec une option de niveau de message.
  - Changements majeurs sur les rapport d'erreur de partition ; les numéros de ligne dans la chaîne des entrées sont rapportés précisement pour la plupart des erreurs.
  - pan2 a été corrigé afin d'être conforme à la documentation.
  - La balise <CsVersion> fonctionne à nouveau en conformité avec le manuel.
  - Les instructions de boucle { et } ont été fixées. Leur documentation ainsi que celles des opérateurs des expressions de partition ~, &, |, et # ont été ajoutées.
  - hilbert avait ses sorties permutées, c'est corrigé. L'exemple de manual a été mis à jour.

- Changements Internes :

  - Changement de la localisation pour gettext ; les traductions en français et en espagnol (Colombie) sont disponibles.
  - Changements internes dans partikkel, interpolation de la lecture de forme d'onde et du fenêtrage, ce qui permet une synthèse granulaire synchrone de hauteur plus précise. Exemples mis à jour pour partikkel.
  - pvscale : algorithme amélioré pour la SDFT, supprimant la variation d'amplitude.

### Nouveautés dans la version 5.07 (octobre 2007)

- Nouveaux opcodes :

  - pan2 : un opcode de spatialisation stéréo
  - cpsmidinn, pchmidinn, octmidinn : des convertisseurs de numéros de note MIDI
  - fluidSetInterpMethod : interpolation dans les SoundFonts de fluid
  - sflooper : une version SoundFont de flooper2
  - pvsbuffer et pvsbufread : mise en tampon/lecture de fsigs pour des changements de retards/échelle temporelle.

- Nouvelles fonctionnalités :

  - SDFT - la Transformée de Fourier Discrète à fenêtre Glissante -- intégrée aux opcodes pvsanal, etc si le recouvrement est inférieur à ksmps ou inférieur à 10. Certains opcodes pvsXXX sont étendus pour prendre des paramètres de taux-a dans cette situation.

  - Nouvelle option (-O null / --logfile=null) qui désactive tous les messages et toutes les impressions sur la console.

- Bogues corrigés et améliorations :

  - partikkel -- la synthèse par particule avait un bogue accidentel, corrigé.
  - La fermeture de l'entrée MIDI sur Windows(MM) échouait ; corrigé.
  - L'opcode fluidEngine prend maintenant comme paramètres facultatifs le nombre de canaux (compris entre 16 et 256) et le nombre de voix à jouer en polyphonie (compris entre 16 et 4096, la valeur par défaut étant 4096).
  - L'utilitaire atsa se comporte de manière plus sûre lorsqu'il reçoit du silence.
  - ATSaddnz : vérifications améliorées.
  - Les ambisonics (bformdec, bformenc) ont plus d'options pour le contrôle des opposés.
  - Le bogue dans turnoff2 est corrigé.
  - het_export : une vérification erronée plantait l'export.

- Changements Internes :

  - L'installeur sous Windows a été amélioré.
  - CsoundVST a été remplacé par CsoundAC, qui ne dépend pas des en-têtes du SDK de VST.
  - Moins de messages lors du démarrage sous Windows(MM).
  - Le type d'argument p (le taux-k vaut alors 1 par défaut) a été ajouté dans les types des paramètres d'entrée et de sortie des opcodes.

### Nouveautés dans la version 5.06 (juin 2007)

- Nouveaux opcodes granulaires : partikkel, partikkelsync et diskgrain.

- Nouvel opcode pour distribuer des évènements : scoreline.

- Plusieurs nouveaux opcodes en provenance de CsoundAV de Grabriel Maldonado : hvs1, hvs2, hvs3, vphaseseg, inrg, outrg, lposcila, lposcilsa, lposcilsa2, tabmorph, tabmorpha, tabmorphi, tabmorphak, trandom, vtable1k, slider8table, slider16table, slider32table, slider64table, slider8tablef, slider16tablef, slider32tablef, slider64tablef, sliderKawai et la version au taux-a de ctrl7.

- Egalement depuis CsoundAV, plusieurs nouveaux widgets FLTK : FLkeyIn, FLslidBnk2, FLvslidBnk, FLvslidBnk2, FLmouse, FLxyin, FLhvsBox, FLslidBnkSet, FLslidBnkSetk, FLslidBnk2Set, FLslidBnk2Setk, FLslidBnkGetHandle,

- De nouveaux opcodes pvs : pvsdiskin, pvsmorph,

- eqfil

- De nouvelles options de ligne de commande (--m-warnings) pour contrôler les messages

- csladspa : un kit de greffon CSD vers LADSPA.

- Et plusieurs corrections de bogues parmi lesquelles : version au taux-k de system ; problèmes de changement d'échelle de vrandh et de vrandi ; plantage occasionnel de turnoff ; bogue OS X ; ATScross et mod.

  Csound5GUI fonctionne maintenant correctement sur toutes les plates-formes et csoundapi~ (objet pd) a été mis à jour.

Précédent | Niveau supérieur | Suivant
Débuter avec Csound | Sommaire | Partie I. Vue d'ensemble