cpsmidinn

cpsmidinn — Convertit un numéro de note Midi en cycles par seconde.

Description

Convertit un numéro de note Midi en cycles par seconde.

Syntaxe

cpsmidinn (MidiNoteNumber)  (arguments de taux-i ou -k seulement)

où l'argument entre parenthèses peut être une expression.

Exécution

cpsmidinn est une fonction qui prend une valeur de taux-i ou de taux-k représentant un numéro de note Midi et qui retourne la valeur de fréquence équivalente en cycles par seconde (Hertz). Cette conversion suppose que le do médian est la note Midi numéro 60 et que le la du diapason est accordé à 440 Hz. Les numéros de note Midi sont par définition des nombres entiers compris entre 0 et 127 mais des valeurs fractionnaires ou des valeurs en dehors de cet intervalle seront correctement interprétées.

[Note] cpsmidinn vs. cpsmidi

L'opcode cpsmidinn peut être utilisé dans n'importe quelle instance d'instrument de Csound, que celle-ci soit activée depuis un évènement Midi, un évènement de partition, un évènement en ligne, ou depuis un autre instrument. La valeur d'entrée de cpsmidinn peut provenir par exemple d'un p-champ dans une partition textuelle ou bien avoir été retrouvée au moyen de l'opcode notnum à partir de l'évènement Midi en temps réel qui a activé la note courante. Le numéro de note Midi à convertir doit être spécifié comme une expression de taux-i ou de taux-k. D'un autre côté, l'opcode cpsmidi ne fournit des résultats significatifs qu'avec une note activée par le Midi (soit en temps réel soit à partir d'une partition Midi avec l'option -F). Avec cpsmidi, la valeur du numéro de note Midi provient de l'évènement Midi associé à l'instance d'instrument, et aucune source ni aucune expression ne peuvent être spécifiées pour cette valeur.

cpsmidinn et ses opcodes associés sont réellement des convertisseurs de valeur spécialisés dans la manipulation des données de hauteur.

Les données concernant la hauteur et la fréquence peuvent exister dans un des formats suivants :

Tableau 6. Valeurs de Hauteur et de Fréquence

Nom Abréviation
octave point classe de hauteur (8ve.pc) pch
octave point partie décimale oct
cycles par seconde cps
Numéro de note Midi (0-127) midinn

Les deux premières formes sont constituées d'un nombre entier, représentant le registre d'octave, suivi d'une partie décimale dont la signification est particulière. Pour pch, la partie fractionnaire est lue comme deux chiffres décimaux représentant les douze classes de hauteur du tempérament égal de .00 pour do jusqu'à .11 pour si. Pour oct, la partie fractionnaire est interprétée comme une véritable partie fractionnaire décimale d'une octave. Les deux formes fractionnaires sont ainsi dans un rapport de 100/12. Dans les deux formes, la fraction est précédée par un nombre entier indice de l'octave, tel que 8.00 représente le do médian, 9.00 le do au-dessus, etc. Les numéros de note Midi sont compris entre 0 et 127 (inclus), avec 60 représentant le do médian, et sont habituellement des nombres entiers. Ainsi, on peut représenter le la 440 alternativement par 440 (cps), 69 (midinn), 8.09 (pch), ou 8.75 (oct). On peut encoder des divisions microtonales du demi-ton pch en utilisant plus de deux positions décimales.

Les noms mnémotechniques des unités de conversion de hauteur sont dérivés des morphèmes des formes concernées, le second morphème décrivant la source et le premier morphème l'objet (le résultat). Ainsi cpspch(8.09) convertira l'argument de hauteur 8.09 en son équivalent en cps (ou Hertz), ce qui donne la valeur 440. Comme l'argument est constant pendant toute la durée de la note, cette conversion aura lieu pendant l'initialisation, avant qu'aucun échantillon de la note actuelle ne soit produit.

Par constraste, la conversion cpsoct(8.75 + k1) donne la valeur du la 440 transposée par l'intervalle octaviant k1. Le calcul sera répété à chaque k-période car c'est le taux de variation de k1.

[Note] Note

La conversion de pch, oct, ou midinn vers cps n'est pas une opération linéaire mais elle implique un calcul d'exponentielle qui peut coûter cher en temps de traitement s'il est exécuté de manière répétitive. Csound utilise dorénavant une consultation de table interne pour faire cela efficacement, même aux taux audio. Comme l'indice dans la table est tronqué sans interpolation, la résolution en hauteur avec un de ces opcodes est limitée à 8192 divisions discrètes et égales de l'octave, et quelques degrés de l'échelle tempérée égale de 12 demi-tons sont très légèrement désaccordés (d'au plus 0,15 cent).

Exemples

Voici un exemple de l'opcode cpsmidinn. Il utilise le fichier cpsmidinn.csd.

Exemple 177. Exemple de l'opcode cpsmidinn.

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>
; Prints a table showing the equivalents of all Midi
; note numbers from 0-127 in cycles-per-second, 
; octave.decimal, and octave.pitchclass units.

<CsOptions>
; Select audio/midi flags here according to platform.
; This example produces no audio, so we render in
; non-realtime and turn off sound to disk:
-n
</CsOptions>
<CsInstruments>

instr 1
  ; i-time loop to print conversion table
  imidiNN =   0
  loop1:
    icps  = cpsmidinn(imidiNN)
    ioct  = octmidinn(imidiNN)
    ipch  = pchmidinn(imidiNN)
            
    print   imidiNN, icps, ioct, ipch
      
    imidiNN = imidiNN + 1
  if (imidiNN < 128) igoto loop1
endin

instr 2
  ; test k-rate converters
  kMiddleC  =   60
  kcps  = cpsmidinn(kMiddleC)
  koct  = octmidinn(kMiddleC)
  kpch  = pchmidinn(kMiddleC)
            
  printks "%d %f %f %f\n", 1.0, kMiddleC, kcps, koct, kpch
endin

</CsInstruments>
<CsScore>
i1 0 0
i2 0 0.1
e

</CsScore>
</CsoundSynthesizer>


Voici un autre exemple de l'opcode cpsmidinn. Il utilise le fichier cpsmidinn2.csd.

Exemple 178. Second exemple de l'opcode cpsmidinn.

<CsoundSynthesizer>
<CsOptions>
; Select audio/midi flags here according to platform
;;;RT audio out, midi in, note=p4 and velocity=p5
-odac -+rtmidi=virtual -M0d --midi-key=4 --midi-velocity-amp=5
;-iadc    ;;;uncomment -iadc if RT audio input is needed too
; For Non-realtime ouput leave only the line below:
; -o cpsmidinn.wav -W ;;; for file output any platform
</CsOptions>
<CsInstruments>

sr = 44100
ksmps = 32
nchnls = 2
0dbfs = 1

massign 0, 1	;assign all midi to instr. 1

instr 1	;play virtual keyboard

inote = p4
icps  = cpsmidinn(inote)
asig	oscil 0.6, icps, 1
	print icps
	outs  asig, asig

endin

</CsInstruments>
<CsScore>
f0 20
;sine wave.
f 1 0 16384 10 1
;play note from score too
i1 0 1 60
e
</CsScore>
</CsoundSynthesizer>


Voir aussi

octmidinn, pchmidinn, cpsmidi, notnum, cpspch, cpsoct, octcps, octpch, pchoct

Crédits

Dérivé à partir des convertisseurs de valeur originaux de Barry Vercoe.

Nouveau dans la version 5.07