0dbfs — Fixe la valeur des 0 décibels à amplitude maximale.
La valeur par défaut est 32767, si bien que tous les orchestres existants devraient fonctionner.
Les valeurs d'amplitude dans Csound sont toujours relatives à une valeur "0dbfs" représentant l'amplitude maximale possible sans écrêtage. A l'origine cette valeur valait toujours 32767 dans Csound, correspondant à l'étendue bipolaire d'un fichier son sur 16 bit ou d'un codec AN/NA sur 16 bit. Cela reste l'amplitude maximale par défaut dans Csound, pour des raisons de compatibilité descendante. La valeur 0dbfs permet à Csound de produire des valeurs mises à l'échelle de n'importe quel format de sortie, que ce soit en entiers sur 16 bit ou 24 bit, en flottants sur 32 bit, et même en entiers sur 32 bit.
On peut définir 0dBFS dans l'en-tête, pour fixer l'amplitude de référence utilisée par Csound, mais on peut aussi l'utiliser comme variable dans un instrument comme ceci :
ipeak = 0dbfs
asig oscil 0dbfs, freq, 1 out asig * 0.3 * 0dbfs
L'opcode 0dbfs a pour but le codage relatif à une valeur 0dbfs (et l'usage beaucoup plus fréquent des opcodes ampdbfs() !), plutôt que l'utilisation de valeurs d'échantillon explicites. L'utilisation de 0dbfs=1 est conforme aux pratiques de l'industrie, car l'intervalle allant de -1 à 1 est utilisé dans la plupart des formats de plugin commerciaux et dans la plupart des autres systèmes de synthèse comme Pure Data.
Les nombres en virgule flottante écrits dans un fichier, lorsque 0dbfs = 1, ne seront effectivement pas transposés du tout en amplitude. Ainsi les nombres dans le fichier sont exactement ce que l'orchestre dit qu'ils sont.
Pour plus de détails sur les valeurs d'amplitude dans Csound, voir la section Valeurs d'amplitude dans Csound.
Voici un exemple de l'opcode 0dbfs. Il utilise le fichier 0dbfs.csd.
Exemple 26. Exemple de l'opcode 0dbfs.
Voir les sections Audio en Temps Réel et Options de la Ligne de Commande pour plus d'information sur l'utilisation des options de la ligne de commande.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in No messages -odac -iadc -d ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o 0dbfs.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Set the 0dbfs to the 16-bit maximum. 0dbfs = 32767 ; Instrument #1. instr 1 ; Linearly increase the amplitude value "kamp" from ; 0 to 1 over the duration defined by p3. kamp line 0, p3, 1 ; Generate a basic tone using our amplitude value. a1 oscil kamp, 440, 1 ; Multiply the basic tone (with its amplitude between ; 0 and 1) by the full-scale 0dbfs value. out a1 * 0dbfs endin </CsInstruments> <CsScore> ; Table #1, a sine wave. f 1 0 16384 10 1 ; Play Instrument #1 for three seconds. i 1 0 3 e </CsScore> </CsoundSynthesizer>
Voici un autre exemple de l'opcode 0dbfs. Il utilise le fichier 0dbfs-1.csd. Cet exemple a exactement la même sortie que l'exemple précédent, mais les échantillons de sortie sont maintenant normalisés entre -1 et 1.
Exemple 27. Exemple de l'opcode 0dbfs avec une amplitude maximale de 1.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in No messages -odac -iadc -d ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o 0dbfs.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Set the 0dbfs to 1. 0dbfs = 1 ; Instrument #1. instr 1 ; Linearly increase the amplitude value "kamp" from ; -90 to p4 (in dBfs) over the duration defined by p3. kamp line -90, p3, p4 print ampdbfs(p4) ; Generate a basic tone using our amplitude value. a1 oscil ampdbfs(kamp), 440, 1 ; Since 0dbfs = 1 we don't need to multiply the output out a1 endin </CsInstruments> <CsScore> ; Table #1, a sine wave. f 1 0 16384 10 1 ; Play Instrument #1 for three seconds. i 1 0 3 -6 e </CsScore> </CsoundSynthesizer>