fluidAllOut
Prev | Orchestra Opcodes and Operators | Next

## fluidAllOut

fluidAllOut — Collects all audio from all Fluidsynth engines in a performance

## Syntax

    aleft, aright fluidAllOut

## Description

Collects all audio from all Fluidsynth engines in a performance

## Performance

aleft -- Left channel audio output.

aright -- Right channel audio output.

Invoke fluidAllOut in an instrument definition numbered higher than any fluidcontrol instrument definitions. All SoundFonts send their audio output to this one opcode. Send a note with an indefinite duration to this instrument to turn the SoundFonts on for as long as required.

In this implementation, SoundFont effects such as chorus or reverb are used if and only if they are defaults for the preset. There is no means of turning such effects on or off, or of changing their parameters, from Csound.

## Examples

Here is an example of the fluidsynth opcodes. It uses the file fluidAllOut.orc.

    sr = 44100
    kr = 4410
    ksmps = 10
    nchnls = 2
    0dbfs = 32767

    ; LOAD SOUNDFONTS
    gienginenum1 fluidEngine
    gienginenum2 fluidEngine
    isfnum1      fluidLoad "Piano Steinway Grand Model C (21,738KB).sf2", gienginenum1, 1
    ; Bright Steinway, program 1, channel 1
                 fluidProgramSelect gienginenum1, 1, isfnum1, 0, 1
    ; Concert Steinway with reverb, program 2, channel 3
                 fluidProgramSelect gienginenum1, 3, isfnum1, 0, 2
    isfnum2      fluidLoad "63.3mg The Sound Site Album Bank V1.0.SF2", gienginenum2, 1
    ; General MIDI, program 50, channel 2
                 fluidProgramSelect gienginenum2, 2, isfnum2, 0, 50

    ; SEND NOTES TO STEINWAY SOUNDFONT

    instr 1 ; FluidSynth Steinway Rev
      ; INITIALIZATION
                 mididefault   60, p3 ; Default duration of 60 -- overridden by score.
                 midinoteonkey p4, p5 ; Channels MIDI input to pfields.
      ; Use channel assigned in fluidload.
      ichannel   = 1
      ikey       = p4
      ivelocity  = p5
      istatus    = 144
                 fluidControl gienginenum1, istatus, ichannel, ikey, ivelocity
    endin

    instr 2 ; GM soundfont
      ; INITIALIZATION
                 mididefault   60, p3 ; Default duration of 60 -- overridden by score.
                 midinoteonkey p4, p5 ; Channels MIDI input to pfields.
      ; Use channel assigned in fluidload.
      ichannel   = 2
      ikey       = p4
      ivelocity  = p5
      istatus    = 144
                 fluidNote gienginenum2, ichannel, ikey, ivelocity
    endin

    instr 3 ; FluidSynth Steinway Rev
      ; INITIALIZATION
                 mididefault   60, p3 ; Default duration of 60 -- overridden by score.
                 midinoteonkey p4, p5 ; Channels MIDI input to pfields.
      ; Use channel assigned in fluidload.
      ichannel   = 3
      ikey       = p4
      ivelocity  = p5
      istatus    = 144
                 fluidNote gienginenum1, ichannel, ikey, ivelocity
    endin

    ; COLLECT AUDIO FROM ALL SOUNDFONTS

    instr 100 ; Fluidsynth output
      ; INITIALIZATION
      ; Normalize so iamplitude for p5 of 80 == ampdb(80).
      iamplitude = ampdb(p5) * (10000.0 / 0.1)
      ; AUDIO
      aleft, aright fluidAllOut
                 outs aleft * iamplitude, aright * iamplitude
    endin

Here is another more complex example of the fluidsynth opcodes written by Istvan Varga. It uses the file fluidcomplex.csd.

    <CsoundSynthesizer>
    <CsOptions>
    -d -m229 -o dac -T -F midifile.mid
    </CsOptions>
    <CsInstruments>
    sr = 44100
    ksmps = 128
    nchnls = 2
    0dbfs = 1

    ; Example by Istvan Varga

    ; disable triggering of instruments by MIDI events

    ichn = 1
    lp1:
            massign   ichn, 0
            loop_le   ichn, 1, 16, lp1
            pgmassign 0, 0

    ; initialize FluidSynth

    gifld   fluidEngine
    gisf2   fluidLoad "07AcousticGuitar.sf2", gifld, 1

    ; k-rate version of fluidProgramSelect

    opcode fluidProgramSelect_k, 0, kkkkk
      keng, kchn, ksf2, kbnk, kpre xin
            igoto     skipInit
      doInit:
            fluidProgramSelect i(keng), i(kchn), i(ksf2), i(kbnk), i(kpre)
            reinit    doInit
            rireturn
      skipInit:
    endop

    instr 1
      ; initialize channels
      kchn  init 1
      if (kchn == 1) then
    lp2:
            fluidControl gifld, 192, kchn - 1, 0, 0
            fluidControl gifld, 176, kchn - 1, 7, 100
            fluidControl gifld, 176, kchn - 1, 10, 64
            loop_le   kchn, 1, 16, lp2
      endif

      ; send any MIDI events received to FluidSynth
    nxt:
      kst, kch, kd1, kd2 midiin
      if (kst != 0) then
        if (kst != 192) then
            fluidControl gifld, kst, kch - 1, kd1, kd2
        else
            fluidProgramSelect_k gifld, kch - 1, gisf2, 0, kd1
        endif
          kgoto nxt
      endif

      ; get audio output from FluidSynth
      aL, aR fluidOut gifld
            outs      aL, aR
    endin

    </CsInstruments>
    <CsScore>

    i 1 0 3600
    e

    </CsScore>
    </CsoundSynthesizer>

## See Also

fluidEngine, fluidNote, fluidLoad

## Credits

Opcode by Michael Gogins (gogins at pipeline dot com). Thanks to Peter Hanappe for Fluidsynth, and to Steven Yi for seeing that it is necessary to break up the Fluidsynth into several different Csound opcodes.

Prev | Up | Next
FLupdate | Home | fluidCCi