Instantiates a fluidsynth engine, returning a number to identify the engine. ienginenum is used in conjunction with other opcodes for loading and playing SoundFonts and gathering the generated sound.
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 ienginenum1 fluidEngine ienginenum2 fluidEngine isfnum1 fluidLoad "Piano Steinway Grand Model C (21,738KB).sf2", ienginenum1, 1 fluidProgramSelect ienginenum1, 1, isfnum1, 0, 1 ; Bright Steinway, program 1, channel 1 fluidProgramSelect ienginenum1, 3, isfnum1, 0, 2 ; Concert Steinway with reverb, program 2, channel 3 isfnum2 fluidLoad "63.3mg The Sound Site Album Bank V1.0.SF2", ienginenum2, 1 fluidProgramSelect ienginenum2, 2, isfnum2, 0, 50 ; General MIDI, program 50, channel 2 ; 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 ienginenum1, 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 ienginenum2, 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 ienginenum1, 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 comples 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 = 48000 ksmps = 32 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 "2gmgsmt.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 || kch != 10) then fluidControl gifld, kst, kch - 1, kd1, kd2 else fluidProgramSelect_k gifld, kch - 1, gisf2, 128, 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>