Support MIDI en temps réel

Csound supporte les entrées et les sorties MIDI en temps réel, ainsi que les entrées depuis les fichiers MIDI. L'entrée MIDI en temps réel est activée au moyen de l'option de ligne de commande -M (ou --midi-device=PERIPHERIQUE). Vous devez spécifier le numéro ou le nom de périphérique après le -M. Par exemple, pour utiliser le périphérique numéro 2, vous utiliserez quelque chose comme :

csound -M2 monmiditr.csd

Vous pouvez trouver les périphériques disponibles en utilisant un numéro trop grand :

csound -M99 monmiditr.csd

[Note] Note

Ceci ne fonctionnera que si le module MIDI peut être atteint par numéro de périphérique. Pour alsa, il faut d'abord trouver le nom du périphérique en utilisant :

cat /proc/asound/cards

Il faut alors taper quelque chose comme :

csound -+rtmidi=alsa -M hw:3 monmiditr.csd

La sortie MIDI en temps réel est activée au moyen de -Q, avec un numéro ou un nom de périphérique comme c'est montré ci-dessus.

Vous pouvez aussi charger un fichier MIDI en utilisant l'option de ligne de commande -F ou --midifile=FICHIER. Le fichier MIDI est lu en temps réel, et se comporte comme s'il était joué ou reçu en temps réel. Ainsi Csound ne sait pas si l'entrée MIDI vient d'un fichier MIDI ou directement d'une interface MIDI.

Une fois l'entrée et/ou la sortie MIDI activée(s), les opcodes comme MIDI Input et MIDI Output seront effectifs.

Quand l'entrée MIDI est activée (avec -M ou -F), chaque message de noteon entrant génèrera un évènement de note pour un instrument qui a le même numéro que le canal de l'évènement (cela signifie que les instruments contrôlés par le MIDI sont polyphoniques par défaut, car chaque note génèrera une nouvelle instance de l'instrument). Si l'on a qu'un seul instrument, Csound travaille en mode omni, c'est-à-dire qu'il répond à tous les canaux au sein de cet instrument unique. Si l'on a plusieurs instruments numérotés de 1 à 16, alors par défaut instr 1 -> canal 1, instr 2 -> canal 2, à moins que l'on change la répartition (voir massign et pgmassign pour changer ce comportement). Si l'on a plusieurs instruments, mais que instr N manque entre 1 et 16, canal N sera dirigé par défaut sur l'instrument ayant le numéro le plus bas.

Voir les opcodes pour l'Interopérabilité MIDI/Partition pour savoir comment concevoir des instruments utilisables depuis une partition ou pilotés par le MIDI.

Plusieurs modules MIDI en temps réel sont disponibles, et il faut utiliser l'option -+rtmidi (voir -+rtmidi), pour spécifier le module. Le module par défaut est portmidi qui fournit des E/S MIDI adéquates sur toutes les plates-formes, cependant, pour des performances améliorées et plus fiables, des modules spécifiques à certaines plates-formes sont également fournis.

Actuellement les modules midi disponibles sont :

[Astuce] Astuce

Lors de son exécution, Csound traite la partition puis se termine. S'il n'y a pas d'évènements dans la partition, Csound se termine immédiatement. Si l'on désire n'utiliser que des évèments MIDI au lieu des évènements de partition, il faut demander à Csound de s'exécuter pendant un certain temps au moyen d'une instruction f comme "f 0 3600".

Clavier virtuel MIDI

[Clavier virtuel MIDI]

Clavier virtuel MIDI.

Le module du clavier virtuel MIDI (activé par l'option -+rtmidi=virtual sur la ligne de commande) fournit un moyen d'envoyer des informations MIDI en temps réel à Csound sans avoir besoin d'un périphérique MIDI. Il peut envoyer des informations de note, des changements de contrôle, des changements de banque et de programme sur un canal spécifié. L'information MIDI en provenance du clavier virtuel est traitée par Csound exactement de la même manière que si elle venait d'autres pilotes MIDI, si bien que si votre orchestre Csound est conçu pour travailler avec des périphériques matériels MIDI, cela marchera aussi.

Le clavier virtuel utilise l'option de périphérique (-M) pour récupérer le nom d'un fichier de mappage du clavier. Comme tous les pilotes MIDI, celui-ci nécessite un périphérique pour être activé. Si l'on désire seulement utiliser les réglages par défaut du clavier, il suffit de passer 0 (c'est-à-dire -M0). Si au lieu de 0 un nom de fichier est donné, le clavier essaiera de charger le fichier pour le mappage du clavier. Si le fichier n'a pas pu être ouvert ou lu correctement, les réglages par défaut seront utilisés.

Les fichiers de mappage du clavier permettent à l'utilisateur de personnaliser le nom et le numéro des banques ainsi que le nom et le numéro des programmes d'une banque. L'exemple suivant de mappage de clavier (nommé keyboard.map) a des commentaires intégrés sur le format de fichier. Ce fichier est aussi disponible dans la distribution des sources de Csound dans le répertoire InOut/virtual_keyboard.

# Carte de Personnalisation du clavier pour le clavier virtuel
# Steven Yi
#
# USAGE
#
# Lors de l'utilisation du clavier virtuel, vous pouvez fournir un nom de fichier
# pour un mappage des banques et des programmes via l'option -M, par exemple :
#
# csound -+rtmidi=virtual -Mkeyboard.map mon_projet.csd
#
# INFORMATION SUR LE FORMAT
#
# -les lignes commençant par '#' sont des commentaires
# -les lignes avec [] commencent les définitions d'une nouvelle banque,
#  les contenus sont numBanque=nomBanque, avec numBanque=[1,16384]
# -les lignes suivant les instructions de banque sont des définitions de programme
#  dans le format numProgramme=nomProgramme, avec numProgramme=[1,128]
# -les numéros de banque et de programme sont définis dans ce fichier
#  en commençant à 1, mais ils sont convertis en valeurs midi (commençant
#  à 0) lorsqu'ils sont lus
#
# NOTES
#
# -si une définition de banque invalide est trouvée, toutes les
#  définitions de programme qui suivent seront ignorées jusqu'à ce
#  qu'une nouvelle définition de banque valide soit trouvée
# -si une définition valide de banque sans programmes valides est
#  trouvée, elle prendra par défaut les définitions de programme
#  General MIDI
# -si une définition de programme invalide est trouvée, elle sera
#  ignorée

[1=Ma Banque]
1=Mon Patch de Test 1
2=Mon Patch de Test 2
30=Mon Patch de Test 30

[2=Ma Banque2]
1=Mon Patch de Test 1(banque2)
2=Mon Patch de Test 2(banque2)
30=Mon Patch de Test 30(banque2)

Les dix réglettes du haut sont affectées par défaut aux contrôleurs MIDI numéro 1-10, mais on peut les changer à volonté. Les numéros de contrôleur et les valeurs de chaque réglette sont fixés par canal, si bien que l'on peut utiliser différents réglages et valeurs pour chaque canal.

Par défaut il y a 128 banques et pour chaque banque 128 patches réglés par défaut sur les noms General Midi. Le standard de banque MIDI utilise une résolution sur 14 bit pour supporter 16384 banques possibles, mais les numéros de banque par défaut sont 0-127. Pour utiliser des valeurs supérieures à 127, il faut utiliser un mappage de clavier personnalisé et fixer la valeur du numéro de banque désiré pour le nom de la banque. Le clavier virtuel transmettra correctement le numéro de banque comme MSB et LSB avec les contrôleurs 0 et 32.

Outre l'entrée disponible par l'interaction avec la GUI via la souris, on peut aussi déclencher les notes MIDI à partir du clavier ASCII quand la fenêtre du clavier virtuel a le focus. L'arrangement est organisé à la manière d'un traceur et offre deux octaves et une tierce majeure, en partant du do médiant (note MIDI 60). La correspondance entre le clavier ASCII et les valeurs de note MIDI est donnée dans la table suivante.

Tableau 5. Valeurs des notes MIDI du clavier ASCII

Touche Valeur MIDI
z 60
s 61
x 62
d 63
c 64
v 65
g 66
b 67
h 68
n 69
j 70
m 71
q 72
2 73
w 74
3 75
e 76
r 77
5 78
t 79
6 80
y 81
7 82
u 83
i 84
9 85
o 86
0 87
p 88

Voici un exemple de l'utilisation du clavier virtuel MIDI. Il utilise le fichier virtual.csd.

<CsoundSynthesizer>
<CsOptions>
; Select audio/midi flags here according to platform
; Audio out   Audio in     Virtual MIDI    -M0 is needed anyway
-odac           -iadc    -+rtmidi=virtual -M0
</CsOptions>
<CsInstruments>
; By Mark Jamerson 2007

sr=44100
ksmps=10
nchnls=2

massign 1,1
prealloc 1,10

instr 1  ;Midi FM synth 

inote cpsmidi
iveloc ampmidi 10000
idur = 2
    xtratim 1

kgate oscil 1,10,2
anoise noise 100*inote,.99
acps  samphold anoise,kgate
aosc oscili 1000,acps,1
aout = aosc

; Use controller 7 to control volume
kvol ctrl7 1, 7, 0.2, 1

outs kvol * aout, kvol * aout

endin

</CsInstruments>
<CsScore>
f0 3600
f1 0 1024 10 1 
f2 0 16 7 1 8 0 8
f3 0 1024 10 1 .5 .6 .3 .2 .5

e 
</CsScore>
</CsoundSynthesizer>