fluidControl — Envoie un note on, un note off, et d'autres messages MIDI à un preset SoundFont.
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
Les opcodes fluid fournissent une intégration simple dans des opcodes de Csound du synthétiseur Fluidsynth SoundFont2 de Peter Hanappe. Cette implémentation accepte les messages MIDI de note on, note off, de contrôleur, de pitch bend ou de changement de programme au taux-k. La polyphonie maximale est de 4096 voix simultanées. N'importe quel nombre de SoundFonts peuvent être chargés et joués simultanément.
ienginenum -- numéro du moteur affecté par fluidEngine
imsgs -- s'il est nul, suppression de l'affichage des messages à l'arrivée des commandes. Vaut 1 par défaut.
kstatus -- octet d'état du message de canal MIDI : 128 pour note off, 144 pour note on, 176 pour control change, 192 for program change, ou 224 pour pitch bend.
kchannel -- numéro du canal MIDI auquel le programme Fluidsynth est affecté : de 0 à 255. Les canaux MIDI dont le numéro est supérieur ou égal à 16 sont des canaux virtuels.
kdata1 -- Pour note on, numéro de touche MIDI : de 0 (le plus bas) à 127 (le plus haut), où 60 est le do médian. Pour les messages de contrôleur continu, le numéro du contrôleur.
kdata2 -- Pour note on, la vélocité de touche MIDI : de 0 (pas de son) à 127 (le plus fort). Pour les messages de contrôleur continu, la valeur du contrôleur.
Appelez fluidControl dans les définitions d'instrument qui jouent réellement des notes et qui envoient des messages de contrôle. Chaque définition d'instrument doit utiliser de manière cohérente un canal MIDI qui a été affecté à un programme Fluidsynth au moyen de fluidLoad.
Dans cette implémentation, les effets SoundFont tels que chorus ou réverbération sont utilisés si et seulement s'ils sont présents par défaut pour le preset. Il y a quelques moyens d'activer ou d'arrêter les effets de chorus et de réverbération en utilisant fluidEngine, et de changer certains de leurs paramètres avec fluidCCi et fluidCCk.
Voici un exemple plus complexe des opcodes fluidsynth. 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
Opcodes par Michael Gogins (gogins@pipeline.com). Merci à Peter Hanappe pour Fluidsynth, et à Steven Yi pour avoir réalisé qu'il était nécessaire de diviser Fluidsynth en plusieurs opcodes Csound différents.
Nouveau dans Csound5.00
Le paramètre facultatif imsgs a été introduit dans la version 6.14.