midiin — Retourne un message MIDI générique reçu sur le port MIDI IN.
kstatus -- le type de message MIDI. Peut être :
128 (note off)
144 (note on)
160 (aftertouch polyphonique)
176 (changement de contrôle)
192 (changement de programme)
208 (aftertouch de canal)
224 (pitch bend
0 si aucun message MIDI n'est en attente dans le tampon MIDI IN
kchan -- canal MIDI (1-16)
kdata1, kdata2 -- données dépendant du message
midiin n'a pas d'arguments en entrée, car il lit implicitement le port MIDI. Il travaille au taux-k. Normalement (quand aucun message n'est en attente), kstatus vaut zéro. kstatus ne prend la valeur du type de message adéquat que lorsque des données MIDI sont présentes dans le tampon MIDI IN.
Note | |
---|---|
Il faut faire attention lorsque l'on utilise midiin dans des instruments de faible numéro car une note MIDI démarrera des instances supplémentaires des instruments, ce qui provoquera des duplications d'évènement et un comportement étrange. Utiliser massign pour diriger les messages de note MIDI vers un intrument différent ou pour désactiver l'activation d'instruments à partir du MIDI. |
Voici un exemple ce l'opcode midiin. Il utilise le fichier midiin.csd.
Exemple 598. Exemple ce l'opcode midiin.
Voir les sections Audio en Temps Réel et Options de la Ligne de Commande pour plus d'information sur l'utilisation des options de la ligne de commande.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in No messages -odac -iadc -d -M0 -+rtmidi=virtual ;;;RT audio I/O with MIDI in ; For Non-realtime ouput leave only the line below: ; -o midiin.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 ksmps = 10 nchnls = 1 ; Example by schwaahed 2006 massign 0, 130 ; make sure that all channels pgmassign 0, 130 ; and programs are assigned to test instr instr 130 knotelength init 0 knoteontime init 0 kstatus, kchan, kdata1, kdata2 midiin if (kstatus == 128) then knoteofftime times knotelength = knoteofftime - knoteontime printks "kstatus= %d, kchan = %d, \\tnote# = %d, velocity = %d \\tNote OFF\\t%f %f\\n", 0, kstatus, kchan, kdata1,kdata2, knoteofftime, knotelength elseif (kstatus == 144) then knoteontime times printks "kstatus= %d, kchan = %d, \\tnote# = %d, velocity = %d \\tNote ON\\t%f\\n", 0, kstatus, kchan, kdata1, kdata2, knoteontime elseif (kstatus == 160) then printks "kstatus= %d, kchan = %d, \\tkdata1 = %d, kdata2 = %d \\tPolyphonic Aftertouch\\n", 0, kstatus, kchan, kdata1, kdata2 elseif (kstatus == 176) then printks "kstatus= %d, kchan = %d, \\t CC = %d, value = %d \\tControl Change\\n", 0, kstatus, kchan, kdata1, kdata2 elseif (kstatus == 192) then printks "kstatus= %d, kchan = %d, \\tkdata1 = %d, kdata2 = %d \\tProgram Change\\n", 0, kstatus, kchan, kdata1, kdata2 elseif (kstatus == 208) then printks "kstatus= %d, kchan = %d, \\tkdata1 = %d, kdata2 = %d \\tChannel Aftertouch\\n", 0, kstatus, kchan, kdata1, kdata2 elseif (kstatus == 224) then printks "kstatus= %d, kchan = %d, \\t ( data1 , kdata2 ) = ( %d, %d )\\tPitch Bend\\n", 0, kstatus, kchan, kdata1, kdata2 endif endin </CsInstruments> <CsScore> i130 0 3600 e </CsScore> </CsoundSynthesizer>