0dbfs
Prev | Orchestra Opcodes and Operators | Next

## 0dbfs

0dbfs — Sets the value of 0 decibels using full scale amplitude.

## Description

Sets the value of 0 decibels using full scale amplitude.

## Syntax

    0dbfs = iarg

    0dbfs

## Initialization

iarg -- the value of 0 decibels using full scale amplitude.

## Performance

The default is 32767, so all existing orcs should work.

Amplitude values in Csound are always relative to a "0dbfs" value representing the peak available amplitude before clipping. In the original Csound, this value was always 32767, corresponding to the bipolar range of a 16bit soundfile or 16bit AD/DA codec. This remains the default peak amplitude for Csound, for backward compatibility. The 0dbfs value enables Csound to produce appropriately scaled values to whatever output format is being used, whether 16bit integer, 24bit integer, 32bit floats, or even 32bit integers.

OdBFS can be defined in the header, to set the amplitude reference Csound will use, but it can also be used as a varible inside instruments like this:

    ipeak = 0dbfs

    asig oscil 0dbfs, freq, 1
         out   asig * 0.3 * 0dbfs

The purpose of the 0dbfs opcode is for people to start to code 0dbfs-relatively (and use the ampdbfs() opcodes a lot more!), rather than use explicit sample values. Using 0dbfs=1 is in accordance to industry practice, as ranges from -1 to 1 are used in most commercial plugin formats and in most other synthesis systems like Pure Data.

Floats written to a file, when 0dbfs = 1, will in effect go through no range translation at all. So the numbers in the file are exactly what the orc says they are.

For more details on amplitude values in Csound, see the section Amplitude values in Csound

## Examples

Here is an example of the 0dbfs opcode. It uses the file 0dbfs.csd.

Example 26. Example of the 0dbfs opcode.

See the sections Real-time Audio and Command Line Flags for more information on using command line flags.

    <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>

Here is another example of the 0dbfs opcode. It uses the file 0dbfs-1.csd. This example has exactly the same output as the previous example, but output samples should now be normalized between -1 and 1.

Example 27. Example of the 0dbfs opcode with maximum amplitude of 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>

## See also

ampdbfs()

## Credits

Author: Richard Dobson
May 2002

New in version 4.10

Example written by Kevin Conder.

Example written by Kevin Conder.

New in version 4.20

Prev | Up | Next
|| | Home | <<