fluidProgramSelect — Affecte un preset d'un SoundFont à un canal d'un fluidEngine.
Opcode du greffon fluidOpcodes. Ce greffon se trouve dans le répertoire des greffons et il doit être installé séparément. Le répertoire des greffons est ici : https://github.com/csound/plugins
Affecte un preset d'un SoundFont à un canal d'un fluidEngine.
ienginenum -- numéro du moteur affecté par fluidEngine
ichannelnum -- numéro du canal auquel affecter le preset dans le fluidEngine donné
isfnum -- numéro du SoundFont duquel le preset est issu
ibanknum -- numéro de la banque dans le SoundFont de laquelle le preset est issu
ipresetnum -- numéro du preset à affecter
Voici un exemple de l'opcode fluidProgramSelect. Il utilise le fichier fluidProgramSelect.csd.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform -odac -+rtmidi=virtual -M0 ;;;realtime audio out and realtime midi in ;-iadc ;;;uncomment -iadc if realtime audio input is needed too ; For Non-realtime ouput leave only the line below: ;-o fluidProgramSelect.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 giengine fluidEngine ; soundfont path to manual/examples isfnum fluidLoad "19Trumpet.sf2", giengine, 1 fluidProgramSelect giengine, 1, isfnum, 0, 56 instr 1 mididefault 60, p3 midinoteonkey p4, p5 ikey init p4 ivel init p5 fluidNote giengine, 1, ikey, ivel endin instr 99 imvol init 7 asigl, asigr fluidOut giengine outs asigl*imvol, asigr*imvol endin </CsInstruments> <CsScore> i 1 0 2 60 100 ;play one note from score and... i 99 0 60 ;play virtual keyboard for 60 sec. e </CsScore> </CsoundSynthesizer>
Voici un autre exemple de l'opcode fluidProgramSelect écrit par Istvan Varga. Il utilise le fichier fluidcomplex.csd.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ;Anna.mid is a midi file, a song by The Beatles and can be found on the internet -odac -T -F Anna.mid;;;realtime audio I/O and midifile in ;-iadc ;;;uncomment -iadc if realtime audio input is needed too ; For Non-realtime ouput leave only the line below: ; -o fluidcomplex.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 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 "sf_GMbank.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 ivol init 3 ;a bit louder aL, aR fluidOut gifld outs aL*ivol, aR*ivol endin </CsInstruments> <CsScore> i 1 0 3600 e </CsScore> </CsoundSynthesizer>
fluidEngine, fluidNote, fluidLoad
Plus d'information sur soundfonts dans les Floss Manuals : https://flossmanual.csound.com/midi/reading-midi-files
D'autres informations sur soundfonts dans Wikipedia : http://en.wikipedia.org/wiki/Soundfont