Opcodes Jacko
Précédent | Partie II. Vue d'ensemble des opcodes | Suivant

## Opcodes Jacko

Ces opcodes permettent l'utilisation des ports de Jack depuis les orchestres et les instruments de Csound. Les ports peuvent recevoir ou envoyer des données audio ou MIDI, et envoyer des données de note.

Les opcodes Jacko ne remplacent pas le pilote de Jack et les options de la ligne de commande de Csound pour Jack, et les opcodes Jacko ne travaillent pas avec ces derniers (d'où le nom "Jacko" au lieu de "Jack"). Les opcodes Jacko sont une facilité indépendante qui offre une plus grande flexibilité dans le routage du signal.

De plus, les opcodes Jacko peuvent travailler avec le système Jack en mode "roue libre", ce qui permet l'utilisation de synthétiseurs externes supportant Jack, comme Aeolus ou Pianoteq, pour restituer les pièces de Csound soit plus rapides, soit, ce qui est plus important, moins rapides que le temps réel. C'est très utile pour restituer des pièces complexes sans coupure au moyen d'instruments comme Aeolus, qui peut n'être accessible qu'à travers Jack.

Les opcodes Jacko comprennent : JackoInit, pour initialiser l'instance courante de Csound en tant que client Jack. JackoInfo, pour imprimer l'information sur le démon Jack, ses clients, leurs ports et leurs connexions. JackoFreewheel, pour activer ou désactiver le mode "roue libre" de Jack. JackoAudioInConnect, pour créer une connexion entre le port Jack d'une sortie audio externe et un port Jack d'entrée dans Csound. JackoAudioOutConnect, pour créer une connexion entre un port Jack de Csound et le port Jack d'une entrée audio externe. JackoMidiInConnect, pour créer une connexion depuis un port Jack MIDI externe. Les évènements MIDI en provenance de Jack sont reçus par les opcodes MIDI réguliers de Csound et le système MIDI interop. JackoMidiOutConnect, pour créer une connexion entre un port Jack de Csound et le port Jack d'une entrée MIDI externe. JackoOn, pour activer ou désactiver les ports Jack de Csound. JackoAudioIn, pour recevoir les données audio d'un port Jack d'entrée dans Csound, qui les a lui-même reçu du port externe auquel il est connecté. JackoAudioOut, pour envoyer des données audio à un port Jack de sortie de Csound, qui les enverra lui-même vers le port externe auquel il est connecté. JackoMidiOut, pour envoyer des message de canal MIDI à un port Jack de sortie de Csound, qui les enverra lui-même vers le port externe auquel il est connecté. JackoNoteOut, pour envoyer une note (avec sa durée) à un port Jack de sortie de Csound, qui l'enverra lui-même vers le port externe auquel il est connecté. JackoTransport, pour contrôler le routage de Jack.

Un scénario d'utilisation typique des opcodes Jacko ressemblera à ceci.

## Exemples

Voici un exemple des opcodes Jacko. Il utilise le fichier jacko.csd.

Exemple 7. Exemple des opcodes Jacko.

    <CsoundSynthesizer>
    <CsOptions>
    csound -m255 -M0 -+rtmidi=null -RWf --midi-key=4 --midi-velocity=5 -o jacko_test.wav
    </CsOptions>
    <CsInstruments>

    ;;;;
    ;;;; NOTE: this csd must be run after starting "aeolus -t".
    ;;;;

    sr    	   = 48000
    	   ; The control rate must be BOTH a power of 2 (for Jack)
    	   ; AND go evenly into sr. This is about the only one that works!
    ksmps 	   = 128
    nchnls 	   = 2
    0dbfs 	   = 1

    	   JackoInit		"default", "csound"

    	   ; To use ALSA midi ports, use "jackd -Xseq"
    	   ; and use "jack_lsp -A -c" or aliases from JackInfo,
    	   ; probably together with information from the sequencer,
    	   ; to figure out the damn port names.

    	   ; JackoMidiInConnect   "alsa_pcm:in-131-0-Master", "midiin"
    	   JackoAudioInConnect 	"aeolus:out.L", "leftin"
    	   JackoAudioInConnect 	"aeolus:out.R", "rightin"
    	   JackoMidiOutConnect 	"midiout", "aeolus:Midi/in"

               ; Note that Jack enables audio to be output to a regular
     	   ; Csound soundfile and, at the same time, to a sound
    	   ; card in real time to the system client via Jack.

           	   JackoAudioOutConnect "leftout", "system:playback_1"
    	   JackoAudioOutConnect "rightout", "system:playback_2"
    	   JackoInfo

    	   ; Turning freewheeling on seems automatically
               ; to turn system playback off. This is good!

    	   JackoFreewheel	1
    	   JackoOn

    	   alwayson		"jackin"

    	   instr 1
    	   ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    ichannel   =			p1 - 1
    itime 	   = 			p2
    iduration  = 			p3
    ikey 	   = 			p4
    ivelocity  = 			p5
    	   JackoNoteOut 	"midiout", ichannel, ikey, ivelocity
    	   print 		itime, iduration, ichannel, ikey, ivelocity
    	   endin

    	   instr jackin
    	   ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    	   JackoTransport	3, 1.0
    aleft 	   JackoAudioIn		"leftin"
    aright 	   JackoAudioIn 	"rightin"

    	   ; Aeolus uses MIDI controller 98 to control stops.
               ; Only 1 data value byte is used, not the 2 data
    	   ; bytes often used  with NRPNs.
               ; The format for control mode is 01mm0ggg:
    	   ; mm 10 to set stops, 0, ggg group (or Division, 0 based).
    	   ; The format for stop selection is 000bbbbb:
    	   ; bbbbb for button number (0 based).

    	   ; Mode to enable stops for Divison I: b1100010 (98
               ; [this controller VALUE is a pure coincidence]).

    	   JackoMidiOut          "midiout", 176, 0, 98, 98

    	   ; Stops: Principal 8 (0), Principal 4 (1) , Flote 8 (8) , Flote 2 (10)

    	   JackoMidiOut          "midiout", 176, 0, 98, 0
    	   JackoMidiOut          "midiout", 176, 0, 98, 1
    	   JackoMidiOut          "midiout", 176, 0, 98, 8
    	   JackoMidiOut          "midiout", 176, 0, 98, 10

    	   ; Sends audio coming in from Aeolus out
    	   ; not only to the Jack system out (sound card),
    	   ; but also to the output soundfile.
               ; Note that in freewheeling mode, "leftout"
               ; and "rightout" simply go silent.

     	   JackoAudioOut 	"leftout", aleft
    	   JackoAudioOut 	"rightout", aright
    	   outs  		aright, aleft
    	   endin

    </CsInstruments>
    <CsScore>
    f 0 30
    i 1 1 30 60 60
    i 1 2 30 64 60
    i 1 3 30 71 60
    e 2
    </CsScore>
    </CsoundSynthesizer>

## Crédits

Par Michael Gogins, 2010

Précédent | Niveau supérieur | Suivant
Opcodes de graphe de fluence | Sommaire | Opcodes Python