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 :
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 :
Orchestre
setksmps iksmps
comme dans les UDOs de Csound5.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
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.
Partition
Opcodes et gens modifiés
Utilitaires
Frontaux
Corrections de bogues
Changements système
Changements de plateforme
API
Nouvelles fonctions de l'API...
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);
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);
PUBLIC int csoundStart(CSOUND *csound);
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);
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
Interne
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.
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.
C'est principalement une distribution de correction de bogues avec cependant de nouveaux opcodes et des améliorations.
Nouveaux opcodes :
GEN et macros :
Orchestre :
Opcodes et GENs modifiés :
Bogues corrigés :
Changements système :
Changement sur les plates-formes :
Linux :
OSX :
Haiku :
Android :
iOS :
API :
C'est principalement une distribution de correction de bogues avec cependant de nouveaux opcodes et des améliorations.
Nouveaux opcodes :
Nouvelles fonctionnalités
Bogues corrigés et améliorations :
Changements internes :
C'est principalement une distribution sans changement majeur mais avec de nombreuses corrections.
Nouvel opcode :
Opcodes et GENs modifiés :
Utilititaires :
Bogues corrigés :
Changements système :
Changement internes :
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 et GENs modifiés :
Utilititaires :
Frontaux :
Bogues corrigés et améliorations :
Changements système :
Changement internes :
Nouveaux opcodes:
Nouveau GEN et macros
Opcodes et GENS modifiés
Bogues corrigés :
Changements systèmes :
Changements internes :
Nouveaux opcodes :
Nouvelles fonctionnalités :
Bogues corrigés et améliorations :
Changements internes :
Nouveaux opcodes :
Nouvelles fonctionnalités :
Bogues corrigés et améliorations :
Changements internes :
Nouveaux opcodes :
Bogues corrigés et améliorations :
Changements Internes :
Nouveaux opcodes :
Nouvelles fonctionnalités :
Bogues corrigés et améliorations :
Changements Internes :
Nouvelles fonctionnalités :
Bogues corrigés et améliorations :
Changements Internes :
Nouveaux opcodes :
Nouvelles fonctionnalités :
Bogues corrigés et améliorations :
Changements Internes :
Nouveaux opcodes :
Nouvelles fonctionnalités :
Bogues corrigés et améliorations :
Changements Internes :
Nouveaux opcodes :
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 :
Changements Internes :
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 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.