cpuprc — Contrôle l'allocation des ressources cpu par instrument, pour optimiser la sortie en temps réel.
Contrôle l'allocation des ressources cpu par instrument, pour optimiser la sortie en temps réel.
insnum -- numéro de l'instrument
Sinsname -- nom de l'instrument
ipercent -- pourcentage du temps de traitement cpu à allouer. On peut aussi l'exprimer sous forme fractionnaire.
cpuprc fixe le pourcentage du temps de traitement cpu utilisé par un instrument, afin d'éviter un sous-remplissage du tampon dans les exécutions en temps réel. L'utilisateur doit fixer la valeur de ipercent pour chaque instrument qui sera activé en temps réel. En supposant que le temps de traitement cpu total soit 1OO% en théorie, cette valeur de pourcentage ne peut être définie qu'empiriquement, car il y a trop de facteurs qui contribuent à limiter la polyphonie en temps réel sur différents ordinateurs.
Par exemple si ipercent est fixé à 5% pour l'instrument 1, le nombre maximum de voix que l'on pourra allouer en temps réel est 20 (5% * 20 = 100%). Si l'on essaye de jouer une note supplémentaire alors que les 20 notes précédentes sont toujours jouées, Csound empêche l'allocation de cette note et affiche le message d'avertissement suivant :
impossible d'allouer la dernière note car il n'y a plus de temps cpu disponible
Afin d'éviter les sous-remplissages de tampon audio, il est suggéré de fixer le nombre maximum de voix à une valeur légèrement inférieure à la puissance de traitement réelle de l'ordinateur. Parfois, un instrument peut avoir besoin de plus de temps de traitement que la normale. Si, par exemple, l'instrument contient un oscillateur qui lit une table trop grande pour la mémoire cache, il sera plus lent qu'en temps normal. De plus, chaque programme s'exécutant concuramment dans l'environnement multitâche, peut consommer de la puissance processeur à divers degrés.
Au début, tous les instruments reçoivent une valeur par défaut de ipercent égale à 0.0% (c'est-à-dire un temps de traitement nul équivalent à une vitesse de processeur infinie). Ce réglage convient très bien pour les sessions en temps différé.
Toutes les instances de cpuprc doivent être définies dans la section d'en-tête et non dans le corps de l'instrument.
Voici un exemple de l'opcode cpuprc. Il utilise le fichier cpuprc.csd.
Exemple 188. Exemple de l'opcode cpuprc.
Voir les sections Audio en Temps Réel et Options de la Ligne de Commande pour plus d'information sur l'utilisation des options de la ligne de commande.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform -odac ;;;realtime audio out ;-iadc ;;;uncomment -iadc if realtime audio input is needed too ; For Non-realtime ouput leave only the line below: ; -o cpuprc.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 cpuprc 1, 2 cpuprc 2, 30 instr 1 ;cpu processing-time percent usage is set to 2% for each note asig oscil 0.2, 440, 1 outs asig, asig endin instr 2 ;cpu processing-time percent usage is set to 30% for each note ;so the 4 notes of the score exceeds 100% by far asig oscil 0.2, 440, 1 outs asig, asig endin </CsInstruments> <CsScore> f 1 0 32768 10 1 ; sine wave i 1 0 1 i 1 0 1 i 1 0 1 i 1 0 1 ;too many notes to process, ;check Csound output! i 2 3 1 i 2 3 1 i 2 3 1 i 2 3 1 e </CsScore> </CsoundSynthesizer>